“使用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请求中。
谢谢您的建议。
答案 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 ...