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

使用curl无表单POST上传文件至PHP服务报错,如何解决?

问题解答

PHP默认的$_FILES数组仅支持解析multipart/form-data编码的HTTP上传请求(也就是HTML表单提交的标准格式),你使用curl -T发送的是Raw格式的POST/PUT请求,这种请求不会被PHP解析到$_FILES中,因此现有代码会因访问未定义的$_FILES['userfile']触发内部错误。

解决方法

方法1:适配现有PHP代码(推荐)

使用curl模拟表单上传格式,命令如下:

curl -X POST -F "userfile=@/tmp/image.png" https://web-server-host/upload.php
  • -F参数会自动将请求编码为multipart/form-data
  • userfile=@/tmp/image.png指定上传字段名(对应PHP中的$_FILES['userfile'])和本地文件路径
  • 现有upload.php无需修改即可正常运行

方法2:修改PHP代码支持Raw上传

如果一定要使用curl -T的方式,需要修改PHP代码直接读取请求体内容:

<?php
$uldir = '/tmp/repos/';
// 可自定义文件名,或从请求头/参数中获取
$ulfile = $uldir . basename('image.png');
// 读取原始请求体数据
$rawContent = file_get_contents('php://input');

if (file_put_contents($ulfile, $rawContent)) {
    echo "Uploaded successfully.\n";
} else {
    echo "Could not upload file!\n";
}
?>

对应的curl命令保持不变:

curl -X POST -T /tmp/image.png https://web-server-host/upload.php
# 或使用PUT方法
curl -X PUT -T /tmp/image.png https://web-server-host/upload.php

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:35:52