【发布时间】:2011-10-24 07:07:21
【问题描述】:
问题:
我无法通过 HTTP Post 可靠地将大量文件从一台 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。我需要传输的文件也可能在 50mbs 左右。
我还尝试将以下 php.ini 设置更改为:
- post_max_size : 100M
- upload_max_size : 60M
【问题讨论】:
-
不确定这是否有助于解决您的问题,但您可能需要查看
curl_multi_init:php.net/manual/en/function.curl-multi-init.php -
传输失败通常需要多长时间?会不会和60s超时有关?
-
您是将文件上传到自己的服务器,还是您上传到的服务器不受您控制?
-
@hakre 我正在使用的测试服务器在我的控制之下,但我最终将使用的服务器不在。
-
@AndersLindahl 传输在 60 秒前失败,每次失败通常在同一时间失败。例如,发送两个大文件让我在 10 秒左右失败,发送三个大文件让我在 10 秒左右再次失败。这个时间因我从哪个服务器发送文件而异。
标签: php curl file-transfer