[TOC]
## 實用的PHP腳本
現在來編寫一些更實用的腳本,比如檢查瀏覽頁面的訪問者在用什么瀏覽器。要達到這個目的,需要檢查用戶的 agent 字符串,它是瀏覽器發送的 HTTP 請求的一部分。該信息被存儲在一個變量中。在 PHP 中,變量總是以一個美元符開頭。我們現在感興趣的變量是 $_SERVER['HTTP_USER_AGENT']。
Note:
$_SERVER 是一個特殊的 PHP 保留變量,它包含了 web 服務器提供的所有信息,被稱為超全局變量。請查閱本手冊“超全局變量”中的有關內容以獲取更多信息。這些特殊的變量是在 PHP ? 4.1.0 版本引入的。在這之前使用 $HTTP_*_VARS 數組,如 $HTTP_SERVER_VARS。盡管現在已經不用了,但它們在新版本中仍然存在(參見“舊代碼”一節中的注解)。
要顯示該變量,只需簡單地進行如下操作:
## 案例1:打印一個變量(數組元素)
~~~
<?php
echo $_SERVER['HTTP_USER_AGENT'];
~~~
該腳本的輸出可能是:
~~~
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
~~~
PHP 有很多種不同類型的變量。在以上例子中我們打印了一個數組的單元。數組是一類非常有用的變量。
$_SERVER 只是 PHP 自動全局化的變量之一。可以查閱“預定義變量”一節來查看這些變量的列表,或者也可以通過上節例子中 phpinfo() 函數的輸出來查看。
可以在一個 PHP 標識中加入多個 PHP 語句,也可以建立一個代碼塊來做比簡單的 echo 更多的事情。例如,如果需要識別 Internet Explorer,可以進行如下操作:
## 案例2 流程控制與函數的使用
~~~
正在使用 Internet Explorer。
~~~
這里要介紹一些新的原理。上面用了一個 if 語句。如果用戶對 C 語言的基本語法比較熟悉,則應該對此很熟悉,否則,可能需要拿起任何一本 PHP 介紹性的書籍并閱讀前面的兩三個章節,或者也可以閱讀本手冊的“語言參考”一章。
需要介紹的第二個原理,是對 strpos() 函數的調用。strpos() 是 PHP 的一個內置函數,其功能是在一個字符串中搜索另外一個字符串。例如我們現在需要在 ***$_SERVER['HTTP_USER_AGENT']***(即所謂的 haystack)變量中尋找 'MSIE'。如果在這個 haystack 中該字符串(即所謂的 needle)被找到(“草里尋針”),則函數返回 needle 在 haystack 中相對于開頭的位置;如果沒有,則返回 FALSE。如果該函數沒有返回 FALSE,則 if 會將條件判斷為 TRUE 并運行其花括號 {} 內的代碼;否則,則不運行這些代碼。可以自己嘗試利用 if,else 以及其它的函數如 strtoupper() 和 strlen() 來建立類似的腳本。在本手冊中相關的頁面也包含有范例。如果對如何使用函數不是很確定,可以閱讀手冊中有關“如何閱讀函數的定義”和“函數”的有關章節。
以下我們進一步顯示如何進出 PHP 模式,甚至是在一個 PHP 代碼塊的中間:
## 案例3:混和 HTML 和 PHP 模式
~~~
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() 肯定沒有返回假 (FALSE)</h3>
<p>正在使用 Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() 肯定返回假 (FALSE)</h3>
<center><b>沒有使用 Internet Explorer</b></center>
<?php
}
?>
~~~
該腳本的輸出可能是:
~~~
strpos() 肯定沒有返回假 (FALSE)正在使用 Internet Explorer
~~~
和以上我們用一個 [PHP](http://www.hmoore.net/time/phpmanual) 的 echo 語句來輸出不同的是,我們跳出了 PHP 模式來直接寫 HTML 代碼。這里很值得注意的一點是,對于這兩種情況而言,腳本的邏輯效率是相同的。在判斷了 strpos() 函數的返回值是 TRUE 或是 FALSE,也就是判斷了字符串 'MSIE' 是否被找到之后,最終只有一個 HTML 塊被發送給瀏覽者。
- 入門指引
- 簡介
- PHP是什么
- PHP能做什么
- 簡明教程
- 學PHP需要什么
- 我的第一個PHP頁面
- 實用的PHP腳步
- PHP是如何處理表單的
- 在新版本的PHP如何實用舊的PHP代碼
- 下一步需要做什么
- PHP語言參考
- PHP基本語法
- PHP標記
- PHP多進程管理-pcntl_fork
- PHP文件上傳易犯錯誤
- PHP從HTML中分離
- PHP的指令分隔符
- PHP序列化serialize
- PHP類常量
- PHP Traits
- 從 HTML 中分離
- 注釋
- PHP數據類型
- PHP支持的類型簡介
- 布爾類型(Boolean)就是易經知識
- 整型(integer)即整數
- 浮點型(float)
- 字符串(string)
- 數組(Array)
- 對象(object)一定要搞
- 資源類型(resource)
- PHP安裝與環境配置
- 安裝前需要考慮的事項
- Unix系統下安裝PHP
- Unix 系統下安裝 Apache 1.3.x
- Unix 系統下安裝 Apache 2.x
- Unix 系統下安裝 Nginx 1.4.x
- Unix 平臺安裝 Lighttpd 1.4
- Sun Solaris 上的 Sun、iPlanet 和 Netscape 服務器
- CGI 命令行設置
- 針對 HP-UX 平臺的安裝提示
- 在 OpenBSD 系統下的安裝PHP
- Debian GNU/Linux 安裝說明
- 在Mac OS X 系統下安裝PHP
- 使用軟件包
- 使用內置的 PHP
- Windows 系統下的安裝
- 云計算平臺上的安裝
- Microsoft Azure
- 在亞馬遜(Amazon EC2)安裝PHP
- PHP語法參考
- 類型
- NULL
- Callback 回調類型
- 本文檔中使用的偽類型與變量
- 類型轉換的判別
- PHP 類型比較表
- 常量和變量
- 語法基礎
- 預定義變量
- 變量范圍
- 可變變量
- 外部變量
- 常量
- 語法
- 魔術常量
- PHP表達式&運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- continue
- switch
- declare
- return
- require
- include
- require_once