Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP cURL-如何通过HTTP请求将变量的内容上传为文件?_Php_Curl_Post_File Upload_Php Curl - Fatal编程技术网

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

PHP cURL-如何通过HTTP请求将变量的内容上传为文件?,php,curl,post,file-upload,php-curl,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_RETURN

对于“用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文件中,我上传了\u max\u filesize=500M。因此,看起来这篇文章并没有被视为一个多部分文件上传,而是试图将所有文件数据阻塞到POST请求中


谢谢您的建议。

您可以先将字符串写入/tmp文件夹中的文件。我不确定,但我认为如果你想发布一个文件,你可能需要这样做。报告说:

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

编辑:请检查:

post_max_size整数

设置允许的post数据的最大大小。此设置还影响文件上载。要上载大文件,此值必须大于上载最大文件大小。一般来说,内存限制应大于后最大大小


我知道我可以将数据写入文件。。。我试图避免那额外的步骤。如果不可能,我会做的。我只是觉得我错过了一些明显的东西。Thanks@RyanGriggs尝试将post_max_size值调整为足以容纳该文件的大小(或尝试更小的测试文件),然后查看它是否有效。它只是可能——尽管PHP7.0.0的“所有卷曲文件上传都必须使用卷曲文件”警告对于向前兼容性来说似乎是非常不祥的。您还可以考虑更改您的脚本,该脚本处理上传以将信息作为字符串接受。您可能希望对它进行base64编码,以确保它在从curl到服务器的传输过程中幸存下来。