0

私は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

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 もあります。これにより、接続が開いたままになります。connection:close を試して、リクエストが行われた後に接続を終了します

于 2010-01-21T20:05:19.807 に答える
0

登録せずに投稿してしまったので、正しく返信・編集できるかわかりませんが、こちらで返信させていただきます…

  • サーバー接続は単純にネット経由です。

  • 確かに CURL を使用すると私の生活はずっと楽になりますが、残念ながらこのサーバーでは利用できません。

  • HTTP/1.0 に切り替えて、connection: close を試みましたが、問題は同じままです。特定のレベル (数百 kb) 未満ではほぼ瞬時に転送され、そのレベルを超えると少なくとも 1 分かかります。

ありがとう。

于 2010-01-22T00:50:10.177 に答える