0

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

4 回答 4

4

即使您立即关闭连接,您也正在使用 HTTP/1.1。HTTP/1.1 维护可能会引入延迟的连接。您应该使用 CURL,编写自己的客户端总是一个坏主意,尤其是对于 HTTP。工程师永远不应该重新发明小麦。如果将标头更改为 HTTP/1.0 不起作用,curl 将解决问题。

于 2010-01-21T19:59:04.767 回答
1

如果该其他服务器不需要处理来自带有文件浏览/输入字段的多部分 html 表单的数据,那么您可以使用普通的 POST 请求设置文件传输,如下所示:

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

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

于 2012-03-14T18:09:33.307 回答
0

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

于 2010-01-21T20:05:19.807 回答
0

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

  • 服务器连接只是通过网络。

  • 使用 CURL 肯定会让我的生活更轻松,但遗憾的是它在此服务器上不可用。

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

谢谢。

于 2010-01-22T00:50:10.177 回答