我正在使用以下PHP代码部分。目的是将图像文件从一个服务器POST到另一个服务器。只要文件是<这是完美且非常快速的。 〜250K。超过250k,处理时间跃升至约60秒,并随着图像尺寸的增加而增加。
有什么想法吗?
谢谢!
约翰
$fileContents = file_get_contents($_FILES[$key]['tmp_name']);
$time = strtotime("now");
$body = "--f6sd54c2
Content-Disposition: form-data; name=\"id\"
Content-Length: " . strlen($id) . "
{$id}
--f6sd54c2
Content-Disposition: form-data; name=\"key\"
Content-Length: " . strlen("654t2bsr65t42czd13fvs6dry87") . "
654t2bsr65t42czd13fvs6dry87
--f6sd54c2
Content-Disposition: form-data; name=\"time\"
Content-Length: " . strlen($time) . "
{$time}
--f6sd54c2
Content-Disposition: form-data; name=\"photo\"; filename=\"photo.jpg\"
Content-Type: image/jpeg
Content-Length: " . strlen($fileContents) . "
{$fileContents}
--f6sd54c2--";
$headers = "POST /photos/process.php HTTP/1.1
Host: www.hostname.com
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=f6sd54c2
Content-Length: " . strlen($body) . "
";
$fp = fsockopen("www.hostname.com", 80, $errno, $errstr);
if ($fp){
fwrite($fp, $headers . $body);
fclose($fp);
}
答案 0 :(得分:4)
即使您正在关闭连接,也正在使用HTTP / 1.1。 HTTP / 1.1维护可能引入滞后的连接。您应该使用CURL,编写自己的客户端始终是一个坏主意,尤其是对于HTTP。工程师不应该重新发明风团。如果将标题更改为HTTP / 1.0不起作用,curl将解决问题。
答案 1 :(得分:1)
如果其他服务器不需要处理来自带有文件浏览/输入字段的多部分html表单的数据,那么您可以使用正常的POST请求设置文件传输,如下所示:
$postQuery = 'fileName=image.jpg&fileData='.base64_encode(file_get_contents('image.jpg'));
然后在服务器$_POST['fileName']
上,$_POST['fileData']
可用。
答案 2 :(得分:0)
您还有Connection:keep-alive ..这将保持连接打开。尝试连接:在发出请求后关闭以结束连接
答案 3 :(得分:0)
由于我最初发布时没有注册,我不确定我是否可以正确回复/编辑我的帖子,但我会在这里回复......
服务器连接只需通过网络。
这肯定会让我的生活更容易使用CURL,但遗憾的是它在这台服务器上无法使用。
尝试切换到HTTP / 1.0,尝试连接:关闭,但问题仍然存在。接近一定水平(几百kb)的即时转移,高于该水平的任何地方,至少需要一分钟。
感谢。