[英]PHP cURL - how to upload contents of a variable as a file via HTTP request?
“用php curl上传文件”有很多答案,它们都要求机器上存在物理文件。 它是通过在 POST 字段中的文件名之前引用 @ 符号来上传的。
但是,我已经在 PHP 变量中保存了文件数据:$data。 如何直接上传它而无需先将其写入文件?
我试过这个:
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => SERVER_URL . '/test.php?abc=def&ghi=jkl',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 120,
CURLOPT_POST => 1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => ['file' => $data],
CURLOPT_HTTPHEADER => ["Content-type: multipart/form-data"],
CURLOPT_HEADER => true,
CURLOPT_INFILESIZE => strlen($data)
]);
$response = curl_exec($ch);
但是我的服务器给出了一个错误,即 POST Content-Length 超过了 8388608 字节的服务器限制。 但是,在服务器上的 php.ini 文件中,我有 upload_max_filesize = 500M。 所以看起来这个 POST 没有被视为一个分段文件上传,而是试图将所有文件数据塞入 POST 请求中。
感谢您的任何建议。
您可以先将字符串写入 /tmp 文件夹中的文件。 我不确定,但我认为如果你想发布文件,你可能需要这样做。 文档说:
7.0.0 对禁用 CURLOPT_SAFE_UPLOAD 选项的支持已被删除。 所有 curl 文件上传必须使用CURLFile 。
编辑:请检查post_max_size 上的文档:
post_max_size整数
设置允许的帖子数据的最大大小。 此设置也会影响文件上传。 要上传大文件,此值必须大于upload_max_filesize 。 一般来说, memory_limit应该大于post_max_size ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.