PHP の非同期 HTTP リクエスト: 応答の待機を回避する方法
PHP で HTTP リクエストを処理するには、通常、file_get_contents( )、応答を受信するまでスクリプトの実行を一時停止します。これにより、特に複数のリクエストや時間に依存しないリクエストを行う場合、効率が制限される可能性があります。
解決策: ノンブロッキング HTTP リクエスト
この制限を克服するために、PHP はメソッドを提供します。ノンブロッキング HTTP リクエストを作成します。 1 つのアプローチは、stream_context_create():
$options = [ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode($data) ], 'ssl' => [ 'verify_peer' => false ] ]; $context = stream_context_create($options); file_get_contents("http://example.com/api", false, $context);
を使用することです。これにより、応答を待たずに HTTP リクエストが開始されます。ただし、証明書の検証の問題を回避するために、verify_peer オプションが false に設定されていることに注意することが重要です。
ソケットを使用したカスタム実装
別のオプションは、次を使用してソケットを直接作成することです。 PHP の fsockopen() 関数:
function post_without_wait($url, $params) { // Prepare POST data and URL parameters $post_string = http_build_query($params); $url_parts = parse_url($url); $host = $url_parts['host']; $port = isset($url_parts['port']) ? $url_parts['port'] : 80; $socket = fsockopen($host, $port); // Construct HTTP POST request header $request = "POST {$url_parts['path']} HTTP/1.1\r\n"; $request .= "Host: {$host}\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: " . strlen($post_string) . "\r\n"; $request .= "Connection: Close\r\n\r\n"; $request .= $post_string; // Send HTTP request and close socket fwrite($socket, $request); fclose($socket); }
この関数は、応答を待たずに HTTP POST リクエストを実行します。引数として URL とパラメーターの配列が必要です。
以上がPHP はどのようにしてブロックせずに非同期 HTTP リクエストを行うことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。