2024 日本 PHP 研討會

實用範例

現在讓我們做些更有用的事情。我們將檢查訪客使用的是哪種瀏覽器。為此,我們檢查瀏覽器作為 HTTP 請求的一部分傳送的使用者代理字串。此資訊儲存在一個變數中。在 PHP 中,變數總是始於一個錢字號 ($)。我們現在感興趣的變數是 $_SERVER['HTTP_USER_AGENT']

注意:

$_SERVER 是一個特殊的 PHP 保留變數,其中包含所有網路伺服器資訊。它被稱為超全域變數。有關更多資訊,請參閱超全域變數的相關手冊頁面。

要顯示此變數,您可以簡單地執行以下操作

範例 #1 列印變數(陣列元素)

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

此腳本的範例輸出可能是

Mozilla/5.0 (Linux) Firefox/112.0

PHP 中有許多種類的變數可用。類型。在上面的例子中,我們從一個陣列變數中印出了一個元素。陣列非常有用。

$_SERVER 只是 PHP 自動提供給您的一個變數。您可以在手冊的預先定義變數區段中看到一個列表,或者您可以通過查看上一節範例中使用的 phpinfo() 函式的輸出獲得完整的列表。

您可以在一個 PHP 標籤中放入多個 PHP 陳述式,並建立執行多個 echo 的小程式碼區塊。例如,如果您要檢查 Firefox,您可以這樣做

範例 #2 使用控制結構函式的範例

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo
'您正在使用 Firefox。';
}
?>

此腳本的範例輸出可能是

You are using Firefox.

這裡我們介紹幾個新的概念。我們有一個if 陳述式。如果您熟悉 C 語言使用的基本語法,這對您來說應該很合邏輯。否則,您可能應該找一本 PHP 入門書籍並閱讀前幾章,或者閱讀手冊的語言參考部分。

我們介紹的第二個概念是 str_contains() 函式呼叫。str_contains() 是 PHP 內建的一個函式,用於判斷一個給定的字串是否包含另一個字串。在這個例子中,我們正在 $_SERVER['HTTP_USER_AGENT'](所謂的 haystack)中尋找 'Firefox'(所謂的 needle)。如果在 haystack 中找到 needle,函式會回傳 true。否則,它會回傳 false。如果它回傳 true,則 if 運算式會評估為 true,並執行其 {大括號} 中的程式碼。否則,程式碼不會執行。您可以使用 ifelse 以及其他函式,例如 strtoupper()strlen() 建立類似的範例。每個相關的手冊頁面也包含範例。如果您不確定如何使用函式,您需要閱讀關於如何閱讀函式定義的手冊頁面以及關於PHP 函式的章節。

我們可以更進一步,展示如何在 PHP 區塊中進出 PHP 模式

範例 #3 混合 HTML 和 PHP 模式

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() 回傳 true</h3>
<p>您正在使用 Firefox</p>
<?php
} else {
?>
<h3>str_contains() 回傳 false</h3>
<p>您沒有使用 Firefox</p>
<?php
}
?>

此腳本的範例輸出可能是

<h3>str_contains() returned true</h3>
<p>You are using Firefox</p>

我們沒有使用 PHP 的 echo 語句來輸出內容,而是跳出 PHP 模式直接發送 HTML。這裡需要注意的重要且強大的地方是腳本的邏輯流程保持完整。根據 str_contains() 的結果,只會將其中一個 HTML 區塊發送給瀏覽者。換句話說,這取決於是否找到字串 Firefox

新增註記

使用者貢獻的註記 1 則註記

Declan Kelly
10 年前
請注意,Internet Explorer 11 的使用者代理字串中不再包含 MSIE,例如在 Windows 8 上使用 IE11 時,我會得到以下結果

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

因此,如果您想加入 IE11 的測試,上述程式碼將變更為

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