ホームページ >バックエンド開発 >PHPチュートリアル >他のサーバーからのリクエスト時に PHP が頻繁に応答しない問題を解決するにはどうすればよいですか?

他のサーバーからのリクエスト時に PHP が頻繁に応答しない問題を解決するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-13 13:32:151005ブラウズ

このパズルを解決するには、PHP は他のサーバーからリクエストを行うと応答に失敗することがよくあります。
1 file_get_contents を直接使用して実装します
file_get_contents( $url);

2curl 拡張機能を使用します。
$ch =カール_init();
$timeout = 30;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$contents = trim(curl_exec($ch));
curl_close($ch);

3 ソケット ソケット.
$address = ' http://1.2.3.4:9001/';
$path = '/aaa/bbb';
$sock = fsockopen($address, 80, $errno, $ errstr , 30);
if (!$sock) die("$errstr ($errno)n");
$psw = md5('123.456');
$data = "xxx=xxx&yyy = yyy";
fwrite($sock, "POST $path HTTP/1.0rn");
fwrite($sock, "ホスト: localhostrn");
fwrite($sock, "コンテンツタイプ: application/x-www-form-urlencodedrn");
fwrite($sock, "Content-length: " . strlen($data) . "rn");
fwrite($sock, "Accept: * /*rn");
fwrite($sock, "rn");
fwrite($sock, "$datarn");
fwrite($sock, "rn");
$ headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$strn";
$body = "";
while ( !feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
$body1 =explode("#",$body);
return $body1;

3 つのメソッドはすべて遅いです。

echo ""; を直接出力するのが通常です。

上記のコードは実際には for ループ内で実行されます。以前アクセスした時は以下のパケットキャプチャ

の効果が非常に良かったのですが、最近使用時に固まる事が多くなりました。エラーは報告されます
友達を助けてください!

-----解決策--------------------------------
1. Cookie の影響を考慮してください
2. オリジンを設定する必要があります

はすべてイントラネット アドレスですが、なぜそんなに乱雑に描いているのでしょうか。
------解決策---------
送信元アドレスのネットワークが不良ですか?
------解決策------------------

ディスカッション

明らかにリクエストされた場所であり、接続リソースが限られているように感じます。永続的な接続を確立する方法はありますか。必要に応じてこのリソースを使用してください。接続するたびにリソースを開く必要はありません。

------解決策------------------
ディスカッション

明らかにリクエストされた場所であり、接続リソースが限られているように感じます。永続的な接続を確立する方法はありますか。必要に応じてこのリソースを使用してください。接続するたびにリソースを開く必要はありません。

------解決策------------------
接続が頻繁すぎるため、DOS攻撃の疑いがあり、一時的にブラックリストに登録されました。

curl を使用してキープアライブをリクエストするだけです。

CURLOPT_FRESH_CONNECT => false
CURLOPT_FORBID_REUSE => false

これら 2 つのオプションを設定するだけです。その後は、curl_exec を閉じる必要はありません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。