使用curl v8.2.1提交文件时,PHP后端$_POST['data']为空问题求助
解决curl提交XML后PHP后端$_POST['data']为空的问题
原因说明
当你用curl的-F参数加@符号时,这是模拟表单文件上传,后端不会把文件内容放到$_POST数组里,而是存在$_FILES数组中,这就是$_POST['data']为空的核心原因。
解决方案
方案1:通过$_FILES读取上传的XML文件
在PHP后端,从$_FILES中获取临时文件,再读取内容:
// 检查文件是否上传成功 if (isset($_FILES['data']) && $_FILES['data']['error'] === UPLOAD_ERR_OK) { // 读取临时文件中的XML内容 $xmlContent = file_get_contents($_FILES['data']['tmp_name']); // 后续处理XML内容 } else { // 处理上传失败的情况 echo '文件上传失败,错误码:' . $_FILES['data']['error']; }
方案2:修改curl命令,直接传递XML内容到$_POST
如果不需要文件上传,只是要把XML字符串作为普通POST字段传递,去掉@符号,用命令替换读取文件内容:
$ curl --location 'https://my_serv' -F "flg=OK" -F "data=$(cat test1.xml)"
这种方式适合短XML文件的场景,后端能直接从$_POST['data']中拿到XML字符串。
方案3:检查PHP上传配置(可选)
如果使用方案1仍有问题,确认PHP的上传相关配置是否正确:
- 确保
file_uploads = On(允许文件上传) - 确认
upload_max_filesize和post_max_size的值足够容纳你的XML文件(短文件默认配置即可) - 确保
max_file_uploads >= 1(允许至少上传一个文件)
可以通过在PHP文件中输出phpinfo()查看这些配置。
内容的提问来源于stack exchange,提问作者user140053
相关产品推荐
相关产品推荐

