利用PHP V5開發多任務應用程序(2)_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:詳細解析 PHP 向 MySQL 發送數據過程
      下面的一段代碼是一個很簡單的 HTML 表單: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir

      只粗略地涉及 PHP 的第三個并發實例是 PHP/TK。PHP/TK 是 PHP 的擴展,用于為核心 PHP 提供可移植圖形用戶界面(GUI)綁定。PHP/TK 允許用 PHP 編寫代碼構造桌面 GUI 應用程序。其基于事件的特性將模擬一種易于掌握并且比線程更少出錯的并發形式。此外,并發是 “繼承” 自一項輔助技術,而不是 PHP 的基本功能。

      向 PHP 本身添加線程支持的試驗已經做過多次。據我所知,沒有一次是成功的。但是,Ajax 框架和 PHP/TK 的面向事件的實現表明事件可能比線程能更好地體現 PHP 的并發。PHP V5 證明事實確實如此。

      PHP V5 將提供 stream_select()

      使用標準的 PHP V4 和更低版本,必須按順序執行 PHP 應用程序的所有工作。例如,如果程序需要在兩個商業站點檢索商品的價格,則請求第一個站點的價格,等待至響應到達,再請求第二個站點的價格,然后再次等待。

      如果程序請求同時完成若干項任務會怎么樣?總體來看,程序將在一段時間內完成,在這段時間內,將始終進行連續處理。

      第一個示例

      新的 stream_select 函數及它的幾個助手使這成為可能。請考慮以下示例。

      清單 1. 同時請求多個 HTTP 頁面

      <?php
      echo "Program starts at ". date('h:i:s') . ".
      ";
      $timeout=10;
      $result=array();
      $sockets=array();
      $convenient_read_block=8192;
      /* Issue all requests simultaneously; there's no blocking. */
      $delay=15;
      $id=0;
      while ($delay > 0) {
        $s=stream_socket_client("phaseit.net:80", $errno,
      $errstr, $timeout,
      STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
        if ($s) {
      $sockets[$id ]=$s;
      $http_message="GET /demonstration/delay?delay=" .
        $delay . " HTTP/1.0
      Host: phaseit.net
      ";
      fwrite($s, $http_message);
        } else {
      echo "Stream " . $id . " failed to open correctly.";
        }
        $delay -= 3;
      }
      while (count($sockets)) {
        $read=$sockets;
        stream_select($read, $w=null, $e=null, $timeout);
        if (count($read)) {
      /* stream_select generally shuffles $read, so we need to
      compute from which socket(s) we're reading. */
      foreach ($read as $r) {
        $id=array_search($r, $sockets);
        $data=fread($r, $convenient_read_block);
        /* A socket is readable either because it has
        data to read, OR because it's at EOF. */
        if (strlen($data) == 0) {
      echo "Stream " . $id . " closes at " . date('h:i:s') . ".
      ";
      fclose($r);
      unset($sockets[$id]);
        } else {
      $result[$id] .= $data;
        }
      }
        } else {
      /* A time-out means that *all* streams have failed
      to receive a response. */
      echo "Time-out!
      ";
      break;
        }
      }
      ?>

      分享:PHP實現靜態發布的方法淺談
      如今很多網站都是靜態發布的,PHP當然也可以方便的實現靜態發布嘍,具體的實現方法很多,下面我就說說我會的兩種方法。 方法一:ob_get_contents() 這是一種很方便的方法,也是很常用的方法

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程