[英]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.