Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/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上传内容长度大于文件大小_Php_Rest_Curl - Fatal编程技术网

PHP Curl上传内容长度大于文件大小

PHP Curl上传内容长度大于文件大小,php,rest,curl,Php,Rest,Curl,我正在编写一个脚本来上传文件。这是我第一次在PHP中使用RESTAPI和cURL。上传分为两个阶段。首先,将元数据提交到ImageRelay,其中包括本地文件的文件大小。这将返回一个ID号,您可以使用该ID号构建URL,以便使用CLI“split”来生成上载块。然而,当我使用cURL上传一个文件时,每个文件都额外增加了219个字节。我怀疑这与cURL的工作方式有关,但我不确定如何在不手动将第1阶段中的文件大小增加219字节*x块数的情况下纠正过度使用 下面是从cURL请求接收到的响应数组。实际文

我正在编写一个脚本来上传文件。这是我第一次在PHP中使用RESTAPI和cURL。上传分为两个阶段。首先,将元数据提交到ImageRelay,其中包括本地文件的文件大小。这将返回一个ID号,您可以使用该ID号构建URL,以便使用CLI“split”来生成上载块。然而,当我使用cURL上传一个文件时,每个文件都额外增加了219个字节。我怀疑这与cURL的工作方式有关,但我不确定如何在不手动将第1阶段中的文件大小增加219字节*x块数的情况下纠正过度使用

下面是从cURL请求接收到的响应数组。实际文件块大小为1M 1048576字节,而响应显示在1048795处多出219字节

[http_code] => 201
[header_size] => 583
[request_size] => 346
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 2.039208
[namelookup_time] => 1.2E-5
[connect_time] => 0.040014
[pretransfer_time] => 0.13825
[size_upload] => 1048795
[size_download] => 1
[speed_download] => 0
[speed_upload] => 514314
[download_content_length] => 1
[upload_content_length] => 1048795
[starttransfer_time] => 0.182222
下面是代码的相关部分$file表示块,并且$resource是预先确定的,因为它增加了每个块

$ch = curl_init( $resource );
curl_setopt($ch, CURLOPT_POST, true );
$pdfData = array( 'file' => new CurlFile( "file-chunks/{$file}", 'application/octet-stream') );
curl_setopt($ch, CURLOPT_POSTFIELDS, $params );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
我很感激能提供的任何帮助。我已经为此工作了一个星期,在互联网上搜索,但我不明白为什么块的文件大小与上传内容的长度或大小不匹配。在使用curl而不是PHP over CLI通过命令行执行此操作时,我没有相同的问题。谢谢大家!

[编辑]删除了第一句中的拼写错误![/编辑]
[edit2]添加了赏金[/edit]

尝试发送这样的文件

$headers = array(
    'Content-Type: multipart/form-data'
);

$file = "/full/path/to/file.pdf"; // Full path to file

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
$result = curl_exec($ch);
curl_close($ch);
尝试使用CURLOPT_VERBOSE选项并检查STDERR以查看完整的负载

您还可以尝试使用来检查导线上的内容。
一开始可能会很吓人,但使用起来相当简单。

图像中继API规定,内容类型必须设置为应用程序/八位字节流。你认为这就是问题所在吗?HTTP多部分/表单数据确实在表单字段和文件上传方面有一些额外的开销。它在内容之前有一种小型头,以及它添加的边界字节。我还没有检查,但也许cURL的计数中包含了所有这些。您知道发送到另一端的文件的实际大小吗?如果没有,请尝试将您的代码上传到您自己的PHP脚本,或者如果您能够,请设置一个拦截代理,以查看到底发送了什么。Zinga,这是我收到的最好的反馈。我希望你能用一个例子而不是反馈来回复,我会给你赏金的。还有3个小时,如果到时候你能做到的话。