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

PHP CURL POST上传文件时$_FILES为空的问题排查

解决PHP CURL POST文件无法进入$_FILES的问题

我来帮你排查这个问题,核心原因主要是字段名称不匹配,再结合几个curl配置细节调整就能解决:

1. 字段名不匹配是核心问题

你的send.php里把文件放在了'file'这个键下,但receive.php里却在找'uploaded_file',这就导致接收端根本找不到对应的上传文件,自然$_FILES['uploaded_file']是空的。

2. 修正send.php的代码

把POST字段的键改成和接收端一致的'uploaded_file',同时确认curl_file_create的路径正确(路径是相对于当前send.php的位置,你写的../path/to/file.txt要确保文件真实存在):

<?php
$filedata = curl_file_create('../path/to/file.txt', 'text/plain', 'file.txt');
// 把键名改成uploaded_file,和接收端对应
$array = array(
    'uploaded_file' => $filedata
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://domain_name.com/url/to/script.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// PHP 5.5.0+必须开启这个,才能用curl_file_create替代@语法
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);

$result = curl_exec($ch);
curl_close($ch);
?>

3. 优化receive.php的调试与逻辑

先添加调试代码确认$_FILES是否有值,再处理文件:

<?php
// 先调试看$_FILES的内容
var_dump($_FILES);

if(isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK) {
    // 检查文件是否真的上传成功
    if(is_uploaded_file($_FILES['uploaded_file']['tmp_name'])){
        $contents = file_get_contents($_FILES['uploaded_file']['tmp_name']);
        $data = explode('/',$contents);
        // 这里可以添加处理后的逻辑,比如返回结果给send.php
        echo "文件上传成功,内容已处理";
    }
} else {
    echo "文件上传失败,错误码:" . $_FILES['uploaded_file']['error'] ?? '未知错误';
}
?>

额外说明

你之前看到$_POST里有uploaded_file的数组,是因为当curl发送的字段名不匹配,或者curl配置有误时,curl_file_create创建的对象会被序列化成数组存入$_POST,而不是以文件上传的形式进入$_FILES。调整字段名后就能正常触发文件上传流程了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:35