首頁 >後端開發 >php教程 >如何在 PHP 中執行非同步 GET 請求?

如何在 PHP 中執行非同步 GET 請求?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 12:50:10833瀏覽

How Can I Perform Asynchronous GET Requests in PHP?

PHP 中的非同步GET 要求:詳細指南

請執行簡介

請執行非步驟PHP 允許您的腳本向遠端伺服器發起請求,而不會阻塞目前的執行流程。這對於需要發送大量請求而不停止使用者互動的 Web 應用程式非常有益。

使用 file_get_contents() 進行非同步請求

file_get_contents() 是內建的PHP 函數中可用於同步和非同步 GET 請求。預設情況下,它會同步運行,阻塞腳本直到請求完成。但是,提供可選的上下文參數允許非同步操作。
  • 同步請求:
    $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() 提供了一種較低級別的方法來實現真正的非同步。此函數允許直接套接字通訊。
  • 使用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 請求,無需等待回應,並將控制權返回給呼叫者。需要注意的是,與 file_get_contents() 相比,使用 fsockopen() 需要更多實作的方法。

以上是如何在 PHP 中執行非同步 GET 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn