问题:
我很难通过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设置更改为:
答案 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
这意味着:
upload_max_filesize
(!!)太低了,以防它同时计入所有三个文件(如果不是这样的话,我记不起来了。)< / LI>
100 mb的post_max_size
肯定太低了,你需要更高的值,至少150m
并在顶部添加更多。有关详细信息,请参阅the manual entry。memory_limit
未知,但它太高了,因为它太低了。 测试将memory_limit
设置为0
(无限制),并使用upload_max_filesize
和post_max_size
来满足您的需求。
我希望这可以帮助您解决问题。