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

时间:2019-01-23 22:35:17

标签: php curl post file-upload php-curl

“使用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内容长度超过了8388608字节的服务器限制。但是,在服务器上的php.ini文件中,我的upload_max_filesize = 500M。因此,看起来该POST并未被视为多文件上传,而是试图将所有文件数据塞入POST请求中。

谢谢您的建议。

1 个答案:

答案 0 :(得分:1)

您可以先将字符串写入/ tmp文件夹中的文件。我不确定,但是我想如果要发布文件,可能需要您执行此操作。 documentation说:

  

7.0.0禁用CURLOPT_SAFE_UPLOAD选项的支持已被删除。所有curl文件上传都必须使用CURLFile

编辑:请检查docs on post_max_size

  

post_max_size 整数

     

设置允许的帖子数据的最大大小。此设置还会影响文件上传。要上传大文件,此值必须大于 upload_max_filesize 。一般来说, memory_limit 应该大于 post_max_size ...