現在來寫一些更實用的腳本,例如檢查瀏覽頁面的訪客在使用什麼瀏覽器。要達到這個目的,需要檢查使用者的 agent 字串,它是瀏覽器發送的 HTTP 請求的一部分。該資訊被儲存在一個變數中。在 PHP 中,變數總是以美元符開頭。我們現在感興趣的變數是 $_SERVER['HTTP_USER_AGENT'] 。
PS:$_SERVER 是一個特殊的 PHP 保留變量,它包含了 web 伺服器提供的所有信息,被稱為超全域變數。請查閱本手冊「超全域變數」中的有關內容以取得更多資訊。這些特殊的變數是在 PHP » 4.1.0 版本引入的。在這之前使用 $HTTP_*_VARS 數組,如 $HTTP_SERVER_VARS 。儘管現在已經不用了,但它們在新版本中仍然存在(請參閱「舊程式碼」一節中的註解)。
要顯示該變量,只需簡單地進行如下操作:
Example #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,可以進行如下操作:
Example #2 流程控制與函數的使用
<?php if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MSIE' ) !== FALSE ) { echo '正在使用 Internet Explorer。<br />' ; } ?>
該腳本的輸出可能是:
正在使用 Internet Explorer。<br />
這裡要介紹一些新的原理。上面用了一個 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 程式碼區塊的中間:
Example #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>
和以上我們用一個PHP 的echo 語句來輸出不同的是,我們跳出了PHP 模式來直接寫HTML 程式碼。這裡很值得注意的一點是,對於這兩種情況而言,腳本的邏輯效率是相同的。在判斷了 strpos() 函數的回傳值是 TRUE 或是 FALSE ,也就是判斷了字串 'MSIE' 是否被找到之後,最終只有一個 HTML 區塊被傳送給瀏覽者。
以上是實用的php腳本編寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!