繁体   English   中英

PHP cURL - 如何通过 HTTP 请求将变量的内容作为文件上传?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM