通过HTTP POST&发送大量文件卷曲

时间:2011-08-10 17:03:37

标签: php curl file-transfer

问题:

我很难通过HTTP Post从一个Web服务器可靠地发送大量文件到另一个Web服务器。

我注意到传输文件的成功取决于我选择发送的文件的大小和数量。

如果从源服务器发送的所有文件都出现在接收服务器的目录中,那么我作为成功传输的构成是什么。

//sender script

$ch = curl_init();

$data = array(
    'file1' => '@/var/www/html/uploadtest/largerfile.zip',
    'file2' => '@/var/www/html/uploadtest/largerfile.zip',
    'file3' => '@/var/www/html/uploadtest/smallerfile.zip'
);

curl_setopt($ch, CURLOPT_URL, 'http://domain.com/test/reciever.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$res = curl_exec($ch);

if(curl_exec($ch)){
    print "Error: " . curl_error($ch);
}

echo $res;

//recieving script

print_r($_FILES); //outputs as blank array on failed transfer
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file1.zip" );
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file2.zip" );
move_uploaded_file( $_FILES["file1"]["tmp_name"], "file3.zip" );

当前发送的文件都没有到达目的地。如果我删除一个 largerfile.zip ,则文件传输成功。

我正在通过打印 $ res 来查找错误响应,但即使传输失败,我也看不到任何错误。 * curl_errno *也没有检测到任何内容。

背景:

我之前建议使用FTP,但我将使用的Web API只接受POST。我需要传输的文件也可能是50mb左右。

我也尝试将以下php.ini设置更改为:

  • post_max_size:100M
  • upload_max_size:60M

1 个答案:

答案 0 :(得分:2)

您写道:

  

我需要传输的文件也可能是50mb左右。

我假设您根据每个文件引用硬盘上的文件大小。

  

max_upload_size : 60M(你不是指upload_max_filesize?!)
  post_max_size : 100M

有第三个与文件上传相关的设置:memory_limit。这是因为在保存到服务器上的磁盘之前,这些文件将被加载到内存中。

您想一次传输三个文件。每个文件大约50 MB。让我们总结一下:

50 mb + 50 mb + 50 mb = 150 mb

这意味着:

    60 mb的
  • upload_max_filesize(!!)太低了,以防它同时计入所有三个文件(如果不是这样的话,我记不起来了。)< / LI> 100 mb的
  • post_max_size肯定太低了,你需要更高的值,至少150m并在顶部添加更多。有关详细信息,请参阅the manual entry
  • memory_limit未知,但它太高了,因为它太低了。

测试memory_limit设置为0(无限制),并使用upload_max_filesizepost_max_size来满足您的需求。

我希望这可以帮助您解决问题。