實(shí)用的腳本

現(xiàn)在來編寫一些更實(shí)用的腳本,比如檢查瀏覽頁面的訪問者在用什么瀏覽器。要達(dá)到這個(gè)目的,需要檢查用戶的 agent 字符串,它是瀏覽器發(fā)送的 HTTP 請求的一部分。該信息被存儲在一個(gè)變量中。在 PHP 中,變量總是以一個(gè)美元符開頭。我們現(xiàn)在感興趣的變量是 $_SERVER['HTTP_USER_AGENT']。

注意:

$_SERVER 是一個(gè)特殊的 PHP 保留變量,它包含了 web 服務(wù)器提供的所有信息,被稱為超全局變量。請查閱本手冊“超全局變量”中的有關(guān)內(nèi)容以獲取更多信息。

要顯示該變量,只需簡單地進(jìn)行如下操作:

示例 #1 打印一個(gè)變量(數(shù)組元素)

<?php 
echo $_SERVER['HTTP_USER_AGENT']; 
?>

該腳本的輸出可能是:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

PHP 有很多種不同類型的變量。在以上例子中我們打印了一個(gè)數(shù)組的單元。數(shù)組是一類非常有用的變量。

$_SERVER 只是 PHP 自動全局化的變量之一??梢圆殚啞?a class="link" href="reserved.variables.html">預(yù)定義變量”一節(jié)來查看這些變量的列表,或者也可以通過上節(jié)例子中 phpinfo() 函數(shù)的輸出來查看。

可以在一個(gè) PHP 標(biāo)識中加入多個(gè) PHP 語句,也可以建立一個(gè)代碼塊來做比簡單的 echo 更多的事情。例如,如果需要識別 Internet Explorer,可以進(jìn)行如下操作:

示例 #2 流程控制函數(shù)的使用

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'正在使用 Internet Explorer。<br />';
}
?>

該腳本的輸出可能是:

正在使用 Internet Explorer。<br />

這里要介紹一些新的原理。上面用了一個(gè) if 語句。如果用戶對 C 語言的基本語法比較熟悉,則應(yīng)該對此很熟悉,否則,可能需要拿起任何一本 PHP 介紹性的書籍并閱讀前面的兩三個(gè)章節(jié),或者也可以閱讀本手冊的“語言參考”一章。

需要介紹的第二個(gè)原理,是對 strpos() 函數(shù)的調(diào)用。strpos() 是 PHP 的一個(gè)內(nèi)置函數(shù),其功能是在一個(gè)字符串中搜索另外一個(gè)字符串。例如我們現(xiàn)在需要在 $_SERVER['HTTP_USER_AGENT'](即所謂的 haystack)變量中尋找 'MSIE'。如果在這個(gè) haystack 中該字符串(即所謂的 needle)被找到(“草里尋針”),則函數(shù)返回 needle 在 haystack 中相對于開頭的位置;如果沒有,則返回 false。如果該函數(shù)沒有返回 false,則 if 會將條件判斷為 true 并運(yùn)行其花括號 {} 內(nèi)的代碼;否則,則不運(yùn)行這些代碼??梢宰约簢L試?yán)? if,else 以及其它的函數(shù)如 strtoupper()strlen() 來建立類似的腳本。在本手冊中相關(guān)的頁面也包含有范例。如果對如何使用函數(shù)不是很確定,可以閱讀手冊中有關(guān)“如何閱讀函數(shù)的定義”和“函數(shù)”的有關(guān)章節(jié)。

以下我們進(jìn)一步顯示如何進(jìn)出 PHP 模式,甚至是在一個(gè) 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
}
?>

該腳本的輸出可能是:

<h3>strpos() 肯定沒有返回假 (FALSE)</h3>
<p>正在使用 Internet Explorer</p>

和以上我們用一個(gè) PHP 的 echo 語句來輸出不同的是,我們跳出了 PHP 模式來直接寫 HTML 代碼。這里很值得注意的一點(diǎn)是,對于這兩種情況而言,腳本的邏輯效率是相同的。在判斷了 strpos() 函數(shù)的返回值是 true 或是 false,也就是判斷了字符串 'MSIE' 是否被找到之后,最終只有一個(gè) HTML 塊被發(fā)送給瀏覽者。