PHP - Web 概念


PHP 是一种用于创建动态网页的服务器端脚本语言。它是 Web 开发最流行的编程语言之一。本章旨在让您熟悉使用 PHP 进行 Web 应用程序开发的某些重要概念。

基于 Web 的应用程序是网页的集合。网页主要使用 HTML 标签创建。HTML 由不同的 HTML 标签组成,这些标签是定义页面元素(如文本、图像、表格等)的外观所必需的。因此,HTML 实质上会创建一个静态网页。

Web 应用程序托管在安装了 PHP 模块的 HTTP 服务器上。浏览器充当 http 客户端,遵循 HTTP 协议与服务器建立通信。

PHP Web概念

如何在网页上添加动态内容?

要在网页中添加动态内容,有两种可能性。

JavaScript 是一种客户端脚本语言,可以访问 HTML 文档对象模型并在客户端浏览器上呈现动态内容。JavaScript 代码可以嵌入到 HTML 页面中。

浏览器可能会以 HTML 表单元素的形式从用户那里收集数据,并将其发送到 HTTP 服务器进行处理。PHP 是一种广泛使用的服务器端处理语言。PHP 脚本也可以嵌入到 HTML 页面中。

例子

在以下脚本中,嵌入在 HTML 中的 JavaScript 代码根据客户端浏览器呈现当前日期,而 PHP 代码根据托管此脚本的服务器显示当前日期。


<!DOCTYPE html>
<html>
<body>
   <script type="text/JavaScript">
      document.write("客户端日期:"+Date()+"\n");
   </script>
   <?php
      date_default_timezone_set("Asia/Calcutta");
      echo "服务器日期为 " . date("Y-m-d") . "\n";
      echo "现在时间 " . date("h:i:sa");
   ?>
</body>
</html>

PHP 可以拦截和处理来自 HTML 表单的数据。这允许您从用户那里收集信息。

  • PHP 可以与 MySQL PostgreSQL 等数据库进行交互。这允许您从数据库中存储和检索数据,并动态填充 Web 页面或为 Web 应用程序提供支持。PHP 包括用于数据库处理的 mysqlmysqli PDO 扩展。
  • PHP 可以使用 HTTP GET POST 方法 处理从客户端接收的数据
  • HTTP 是一种无状态协议。但是,它允许分别在服务器和客户端上维护会话和 Cookie。PHP 可用于创建和管理会话和 Cookie。会话允许您在个人用户浏览您的网站时对其进行跟踪,而 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 = "";
            
      // 首先获取系统平台
      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';
      }
            
      // 接下来单独获取用户代理的名称,理由很充分
      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";
      }
            
      // 最终获得正确的版本号
      $known = array('Version', $ub, 'other');
      $pattern = '#(?<browser>' . join('|', $known) . ')
         [/ ]+(?<version>[0-9.|a-zA-Z.]*)#';

      if (!preg_match_all($pattern, $u_agent, $matches)) {
         // 如果没有匹配的版本号,继续
      }

      // 看有多少版本
      $i = count($matches['browser']);

      if ($i != 1) {
         // 将有两个参数,因为我们还没有使用 “其他 ”参数

         // 查看版本是在名称之前还是之后
         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
         } else {
            $version= $matches['version'][1];
         }
      } else {
         $version= $matches['version'][0];
      }
            
      // 检查我们是否有此版本号
      if ($version == null || $version == "") {$version = "?";}
         return array(
            'userAgent' => $u_agent,
            'name'      => $bname,
            'version'   => $version,
            'platform'  => $platform,
            'pattern'   => $pattern
         );
   }
         
   // 现在试试
   $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() 函数用于生成一个随机数。i 该函数可以生成给定范围内的数字。应为随机数生成器设定种子,以防止生成规则的数字模式。这是通过使用 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 />";
?>

它将产生以下结果 -

随机显示图像

使用 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>

将产生以下结果 -

形式
  • 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>选择要访问的网站 :</p>   
<form action = "<?php $_SERVER['PHP_SELF'] ?>" method ="POST">
   <select name = "location">.
         
      <option value = "https://www.qikepu.com">
         qikepu.com
      </option>
         
      <option value = "http://www.google.com">
         Google Search Page
      </option>
         
   </select>
   <input type = "submit" />
</form>

它将产生以下结果 -

浏览器重定向