奇怪的延迟从php fsockopen发布

时间:2010-01-21 17:09:34

标签: php post fsockopen

我正在使用以下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);
}

4 个答案:

答案 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)的即时转移,高于该水平的任何地方,至少需要一分钟。

感谢。