繁体   English   中英

从PHP fsockopen奇怪的延迟发布

[英]Strange delay POSTing from php fsockopen

我正在使用以下PHP代码部分。 目的是将映像文件从一台服务器发布到另一台服务器。 只要文件<〜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);
}

即使您立即关闭连接,您仍在使用HTTP / 1.1。 HTTP / 1.1维护可能会引入延迟的连接。 您应该使用CURL,编写自己的客户端始终是个坏主意,尤其是对于HTTP。 工程师绝不应该重塑风头。 如果将标头更改为HTTP / 1.0不起作用,curl将解决此问题。

如果该另一台服务器不需要处理带有文件浏览/输入字段的多部分html表单中的数据,则可以使用常规POST请求设置文件传输,如下所示:

$postQuery = 'fileName=image.jpg&fileData='.base64_encode(file_get_contents('image.jpg'));

然后在服务器上$_POST['fileName']$_POST['fileData']可用。

您还具有Connection:keep-alive ..这将使连接保持打开状态。 尝试连接:关闭以在发出请求后结束连接

由于我最初是在没有注册的情况下发布的,因此不确定我是否可以正确回复/编辑帖子,但是我会在这里回复...

  • 服务器连接仅通过网络即可。

  • 使用CURL当然会让我的生活变得更加轻松,但是可惜的是它在此服务器上不可用。

  • 尝试切换到HTTP / 1.0,尝试连接:关闭,但问题仍然相同。 低于某个级别(几百kb)的即时传输,高于该级别的任何地方,至少需要一分钟。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM