ホームページ > バックエンド開発 > PHPチュートリアル > PHP で非同期 GET リクエストを実行するにはどうすればよいですか?

PHP で非同期 GET リクエストを実行するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-05 12:50:10
オリジナル
831 人が閲覧しました

How Can I Perform Asynchronous GET Requests in PHP?

PHP の非同期 GET リクエスト: 詳細ガイド

概要

非同期 GET リクエストの実行PHP では、スクリプトを使用せずにリモート サーバーへのリクエストを開始できます。現在の実行フローをブロックします。これは、ユーザーの操作を妨げることなく多数のリクエストを送信する必要がある Web アプリケーションにとって非常に有益です。

非同期リクエストでの file_get_contents() の使用

file_get_contents() は、組み込みの同期および非同期の両方の GET リクエストに利用できる PHP 関数。デフォルトでは、同期的に動作し、リクエストが完了するまでスクリプトをブロックします。ただし、オプションのコンテキスト引数を指定すると、非同期操作が可能になります。

  • 同期リクエスト:

    $output = file_get_contents('http://www.example.com/');
    echo $output;
    ログイン後にコピー
  • 非同期リクエスト:

    $context = stream_context_create([
      'http' => [
          'ignore_errors' => true
      ]
    ]);
    
    $output = file_get_contents('http://www.example.com/', false, $context);
    ログイン後にコピー

真の非同期リクエストに fsockopen() を使用する

file_get_contents() の非同期動作さえ望ましくない状況の場合fsockopen() は、true を達成するための下位レベルのアプローチを提供します。非同期性。この関数により、直接ソケット通信が可能になります。

  • fsockopen() を使用した非同期リクエスト:

    function curl_post_async($url)
    {
      // 1. Parse URL
      $parts = parse_url($url);
    
      // 2. Open Socket
      $fp = fsockopen($parts['host'],
          isset($parts['port']) ? $parts['port'] : 80,
          $errno, $errstr, 30);
    
      // 3. Construct Request
      $out = "GET " . $parts['path'] . " HTTP/1.1\r\n";
      $out .= "Host: " . $parts['host'] . "\r\n";
      $out .= "Connection: Close\r\n\r\n";
    
      // 4. Send Request and Close Socket
      fwrite($fp, $out);
      fclose($fp);
    }
    ログイン後にコピー

この関数は、GET リクエストを即座に起動します。 、応答を待たずに呼び出し元に制御を返します。 fsockopen() を使用するには、file_get_contents() に比べてより実践的なアプローチが必要であることに注意することが重要です。

以上がPHP で非同期 GET リクエストを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート