You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP cURL上传文件至IIS服务器返回500错误(错误码0x80070026)

解决IIS 7.5下PHP cURL上传文件返回500(0x80070026)的问题

从你描述的场景来看,问题核心是PHP cURL发送的multipart/form-data请求(带文件)在IIS 7.5上解析失败,但Apache和Postman都能正常处理。结合错误码0x80070026以及IIS日志的500 0 38(对应ERROR_HANDLE_EOF,即请求解析时遇到意外的文件结束符),可以从以下几个方向排查解决:

1. 为curl_file_create指定明确的MIME类型

Postman在上传文件时会自动为文件添加正确的Content-Type头,但PHP的curl_file_create默认不会指定MIME类型,这可能导致IIS的PHP解析器无法正确识别文件字段。修改你的文件上传代码:

$postData = array(
 'scanDate' => date('Y-m-d H:i:s'),
 // ...其他数据
 // 明确指定文件的MIME类型,这里用application/octet-stream适配多数文件类型,也可以用stl对应的application/sla
 'file1' => curl_file_create('file1.stl', 'application/octet-stream', 'file1.stl'),
 'file2' => curl_file_create('file2.stl', 'application/octet-stream', 'file2.stl')
);

2. 手动指定multipart请求的边界符

cURL自动生成的边界符可能包含IIS解析器不兼容的特殊字符,导致请求边界识别失败。你可以手动指定一个简洁的边界符,并显式设置Content-Type头:

// 生成一个无特殊字符的边界符
$boundary = '----PHPFormBoundary' . uniqid();

// 保持postData不变(已修改curl_file_create的部分)
$postData = array(
 'scanDate' => date('Y-m-d H:i:s'),
 // ...其他数据
 'file1' => curl_file_create('file1.stl', 'application/octet-stream', 'file1.stl'),
 'file2' => curl_file_create('file2.stl', 'application/octet-stream', 'file2.stl')
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// 手动设置带指定边界的Content-Type
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type: multipart/form-data; boundary=$boundary"
));
$result=curl_exec($ch);

3. 调整IIS和PHP的上传大小限制

IIS 7.5默认的最大请求内容长度较小,若文件总大小超过限制会直接返回500错误:

  • IIS端:打开IIS管理器 → 找到对应站点 → 双击「请求筛选」→ 右侧「编辑功能设置」,将「最大允许的内容长度(字节)」调整为足够大的值(比如104857600,即100MB)。
  • PHP端:修改服务器上的php.ini,调整以下参数:
    upload_max_filesize = 100M
    post_max_size = 100M
    max_execution_time = 300
    
    修改后重启IIS和PHP服务生效。

4. 检查FastCGI配置(IIS+PHP的常见坑)

PHP在IIS上通常通过FastCGI运行,若FastCGI配置不当也会导致multipart请求失败:

  • 打开IIS管理器 → 服务器节点 → 「FastCGI设置」→ 找到对应的PHP条目 → 右键「编辑」
  • 确保PHP_FCGI_MAX_REQUESTS设置足够大(比如1000),避免频繁重启进程导致请求中断
  • 调整「请求超时」为足够长的时间(比如300秒),适配文件上传的耗时

5. 开启PHP错误日志定位具体问题

如果以上方法都无效,开启服务器端PHP的错误日志,能直接看到PHP处理请求时的具体错误,而不是只看到IIS的500提示:
修改php.ini:

log_errors = On
error_reporting = E_ALL
error_log = "C:\Windows\Temp\php_upload_errors.log"

上传测试后查看日志文件,能精准定位是文件写入权限、解析错误还是其他问题。


内容的提问来源于stack exchange,提问作者Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:22:28