PHP - Web 概念



PHP 是一種伺服器端指令碼語言,用於建立動態網頁。它是 Web 開發中最流行的程式語言之一。本章旨在讓您熟悉使用 PHP 進行 Web 應用程式開發的某些重要概念。

基於 Web 的應用程式是網頁的集合。網頁主要使用 HTML 標籤建立。HTML 由不同的 HTML 標籤組成,這些標籤需要定義頁面元素(如文字、影像、表格等)的外觀。因此,HTML 本質上建立了一個靜態網頁。

Web 應用程式託管在安裝了 PHP 模組的 HTTP 伺服器上。瀏覽器充當 http 客戶端,遵循 HTTP 協議與伺服器建立通訊。

PHP Web Concepts

如何在網頁上新增動態內容?

要在網頁上新增動態內容,有兩種可能性。

JavaScript 是一種客戶端指令碼語言,可以訪問 HTML 文件物件模型並在客戶端瀏覽器上呈現動態內容。JavaScript 程式碼可以嵌入到 HTML 頁面中。

瀏覽器可以以 HTML 表單元素的形式從使用者那裡收集資料,並將其傳送到 HTTP 伺服器進行處理。PHP 是一種廣泛使用的伺服器端處理語言。PHP 指令碼也可以嵌入到 HTML 頁面中。

示例

在以下指令碼中,嵌入在 HTML 中的 JavaScript 程式碼根據客戶端瀏覽器呈現當前日期,而 PHP 程式碼根據託管此指令碼的伺服器顯示當前日期。

<!DOCTYPE html>
<html>
<body>
   <script type="text/JavaScript">
      document.write("Client's date :"+Date()+"\n");
   </script>
   <?php
      date_default_timezone_set("Asia/Calcutta");
      echo "server's date is " . date("Y-m-d") . "\n";
      echo "The time is " . date("h:i:sa");
   ?>
</body>
</html>

PHP 可以攔截和處理來自 HTML 表單的資料。這允許您從使用者那裡收集資訊。下一章討論 PHP 的表單處理。

PHP 可用於與 MySQL 和 PostgreSQL 等資料庫互動。這允許您儲存和檢索資料庫中的資料,並動態填充網頁或為 Web 應用程式提供支援。PHP 包含用於資料庫處理的 mysql、mysqli 和 PDO 擴充套件。

PHP 可以使用 HTTP GET 和 POST 方法處理從客戶端接收的資料。我們將在後面的章節中詳細討論 PHP 如何處理 GET/POST 方法。

HTTP 是一種無狀態協議。但是,它允許分別在伺服器和客戶端上維護會話和 Cookie。PHP 可用於建立和管理會話和 Cookie。會話允許您在使用者瀏覽網站時跟蹤各個使用者,而 Cookie 允許您在使用者的計算機上儲存資訊以供以後使用。在隨後的章節中,我們將學習 PHP 如何處理會話和 Cookie。

PHP 可用於將檔案上傳到您的 Web 伺服器。這允許您建立允許使用者上傳檔案(例如影像、影片或文件)的 Web 應用程式。

您可以使用 PHP 為您的網站建立登入頁面。當用戶輸入使用者名稱和密碼時,PHP 可以檢查資料庫以檢視使用者是否有效。如果使用者有效,PHP 可以登入使用者並將其重定向到網站的主頁。

識別瀏覽器和平臺

PHP 建立了一些有用的環境變數,可以在用於設定 PHP 環境的 phpinfo.php 頁面中看到。

PHP 設定的環境變數之一是HTTP_USER_AGENT,它標識使用者的瀏覽器和作業系統。

PHP 提供了一個函式 getenv() 來訪問所有環境變數的值。HTTP_USER_AGENT 環境變數中包含的資訊可用於建立適合瀏覽器的動態內容。

示例

以下示例演示瞭如何識別客戶端瀏覽器和作業系統。

注意 - 函式 preg_match() 在PHP 正則表示式 部分中進行了討論。

<?php
   function getBrowser() { 
      $u_agent = $_SERVER['HTTP_USER_AGENT']; 
      $bname = 'Unknown';
      $platform = 'Unknown';
      $version = "";
            
      //First get the platform
      if (preg_match('/linux/i', $u_agent)) {
         $platform = 'linux';
      } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
         $platform = 'mac';
      } elseif (preg_match('/windows|win32/i', $u_agent)) {
         $platform = 'windows';
      }
            
      // Next get the name of the useragent yes seperately and for good reason
      if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) {
         $bname = 'Internet Explorer';
         $ub = "MSIE";
      } elseif(preg_match('/Firefox/i',$u_agent)) {
         $bname = 'Mozilla Firefox';
         $ub = "Firefox";
      } elseif(preg_match('/Chrome/i',$u_agent)) {
         $bname = 'Google Chrome';
         $ub = "Chrome";
      } elseif(preg_match('/Safari/i',$u_agent)) {
         $bname = 'Apple Safari';
         $ub = "Safari";
      } elseif(preg_match('/Opera/i',$u_agent)) {
         $bname = 'Opera';
         $ub = "Opera";
      } elseif(preg_match('/Netscape/i',$u_agent)) {
         $bname = 'Netscape';
         $ub = "Netscape";
      }
            
      // finally get the correct version number
      $known = array('Version', $ub, 'other');
      $pattern = '#(?<browser>' . join('|', $known) . ')
         [/ ]+(?<version>[0-9.|a-zA-Z.]*)#';

      if (!preg_match_all($pattern, $u_agent, $matches)) {
         // we have no matching number just continue
      }

      // see how many we have
      $i = count($matches['browser']);

      if ($i != 1) {
         //we will have two since we are not using 'other' argument yet

         //see if version is before or after the name
         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
         } else {
            $version= $matches['version'][1];
         }
      } else {
         $version= $matches['version'][0];
      }
            
      // check if we have a number
      if ($version == null || $version == "") {$version = "?";}
         return array(
            'userAgent' => $u_agent,
            'name'      => $bname,
            'version'   => $version,
            'platform'  => $platform,
            'pattern'   => $pattern
         );
   }
         
   // now try it
   $ua = getBrowser();
   $yourbrowser = "Your browser: " . $ua['name'] . " " . $ua['version'] .
   " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];

   print_r($yourbrowser);
?>

這在我的機器上產生了以下結果。根據您使用的裝置,此結果可能與您的計算機不同。

它將產生以下結果 -

Your browser: Google Chrome 54.0.2840.99 on windows reports: 
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
   Chrome/54.0.2840.99 Safari/537.36

隨機顯示影像

PHP rand() 函式用於生成隨機數。此函式可以在給定範圍內生成數字。隨機數生成器應進行播種以防止生成規則的數字模式。這是使用srand() 函式實現的,該函式將其引數指定為種子數。

示例

以下示例演示瞭如何從四張影像中每次顯示不同的影像 -

<?php
   srand( microtime() * 1000000 );
   $num = rand( 1, 4 );
         
   switch( $num ) {
      case 1: $image_file = "/php/images/php_image_sample_1.jpg";
         break;
            
      case 2: $image_file = "/php/images/php_image_sample_2.jpg";
         break;
            
      case 3: $image_file = "/php/images/php_image_sample_3.jpg";
         break;
            
      case 4: $image_file = "/php/images/php_image_sample_4.jpg";
         break;
   }
   echo "Random Image : <img src=$image_file />";
?>

它將產生以下結果 -

Display Image Randomly

使用 HTML 表單

在處理 HTML 表單和 PHP 時需要注意的最重要的事情是,HTML 頁面中的任何表單元素都將自動可用於您的 PHP 指令碼。

示例

透過將原始碼放在 test.php 指令碼中來試用以下示例。

<?php
   if( $_POST["name"] || $_POST["age"] ) {
      if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
         die ("invalid name and name should be alpha");
      }
      
      echo "Welcome ". $_POST['name']. "<br />";
      echo "You are ". $_POST['age']. " years old.";
      
      exit();
   }
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "POST">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

它將產生以下結果 -

Forms
  • PHP 預設變數$_PHP_SELF 用於 PHP 指令碼名稱,當您單擊“提交”按鈕時,將呼叫相同的 PHP 指令碼併產生以下結果 -

  • method = "POST" 用於將使用者資料釋出到伺服器指令碼。將資料釋出到伺服器指令碼有兩種方法,這將在PHP GET 和 POST 章節中討論。

瀏覽器重定向

PHP header() 函式向瀏覽器提供原始 HTTP 標頭,可用於將其重定向到另一個位置。重定向指令碼應位於頁面頂端,以防止載入頁面的任何其他部分。

目標由Location: 標頭指定為header() 函式的引數。呼叫此函式後,可以使用exit() 函式停止解析其餘程式碼。

示例

以下示例演示瞭如何將瀏覽器請求重定向到另一個網頁。透過將原始碼放在 test.php 指令碼中來試用此示例。

<?php
   if( $_POST["location"] ) {
      $location = $_POST["location"];
      header( "Location:$location" );
      
      exit();
   }
?>
<p>Choose a site to visit :</p>   
<form action = "<?php <b>$_SERVER['PHP_SELF']</b> ?>" method ="POST">
   <select name = "location">.
         
      <option value = "https://tutorialspoint.tw">
         Tutorialspoint.com
      </option>
         
      <option value = "http://www.google.com">
         Google Search Page
      </option>
         
   </select>
   <input type = "submit" />
</form>

它將產生以下結果 -

Browser Redirection
廣告