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

PHP中cURL调用file_get_contents始终返回空值问题排查

问题分析与解决方案

嘿,我来帮你搞定这个问题!你当前的cURL代码是在以multipart/form-data的表单格式发送请求,而不是像Paw/Postman那样直接把文件内容作为请求体的原始数据发送——这就是为什么file_get_contents('php://input')拿不到内容的关键原因。

下面分两种场景给出对应的修复方案,你可以根据后端的实际接收逻辑选择:

场景1:后端期望直接接收原始文件内容(和Paw测试效果一致)

从你描述的情况看,这应该是你需要的方案:后端通过php://input获取纯文件内容,说明请求体本身就是文件数据,而非表单编码后的内容。

修改后的代码如下:

$target_url = 'http://my-document-handling-service.net:8000/documents';
$filePath = '/Users/xxxxxxx-xxxx/Documents/kitten-test-upload-image-1.jpg';

// 先读取文件内容
$fileContent = file_get_contents($filePath);
if ($fileContent === false) {
    die('Failed to read file');
}

$request = curl_init($target_url);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTREDIR, 3);
// 直接把文件内容作为POST请求的主体
curl_setopt($request, CURLOPT_POSTFIELDS, $fileContent);
// 设置匹配文件类型的Content-Type头,图片这里用image/jpeg,根据实际文件调整
curl_setopt($request, CURLOPT_HTTPHEADER, [
    'Content-Type: image/jpeg',
    'Content-Length: ' . strlen($fileContent)
]);

echo curl_exec($request);
curl_close($request);

这样发送请求后,后端的file_get_contents('php://input')就能拿到和Paw里完全一致的图片编码内容了。

场景2:后端期望接收multipart/form-data表单上传

如果你其实是想模拟表单上传(比如后端原本用$_FILES['file']处理文件),那你的原代码错误在于没有正确指定cURL的文件上传格式。PHP 5.5及以上推荐使用CURLFile类(替代旧版的@前缀语法):

$target_url = 'http://my-document-handling-service.net:8000/documents';
$filePath = '/Users/xxxxxxx-xxxx/Documents/kitten-test-upload-image-1.jpg';

// 创建CURLFile对象,指定文件路径、MIME类型和文件名
$file = new CURLFile($filePath, 'image/jpeg', 'kitten-test.jpg');

$request = curl_init($target_url);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTREDIR, 3);
// 将CURLFile对象作为表单字段的值传入
curl_setopt($request, CURLOPT_POSTFIELDS, [
    'file' => $file
]);

echo curl_exec($request);
curl_close($request);

这种情况下,后端需要用$_FILES['file']来获取上传的文件,而php://input里的内容是multipart/form-data的编码数据,并非纯图片内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:35