一些有用的东西

现在让我们做一些更有用的事情。我们将检查访问者使用的是哪种浏览器。为此,我们检查浏览器作为 HTTP 请求的一部分发送的用户代理字符串。此信息存储在一个 变量 中。变量在 PHP 中总是以美元符号开头。我们现在感兴趣的变量是 $_SERVER['HTTP_USER_AGENT']

注意:

$_SERVER 是一个特殊的预留 PHP 变量,它包含所有 Web 服务器信息。它被称为超全局变量。有关更多信息,请参阅手册页面中有关 超全局变量 的相关内容。

要显示此变量,您可以简单地执行以下操作

示例 #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。这里需要注意的重要的强大之处在于,脚本的逻辑流程保持不变。最终只有一块 HTML 会发送给查看者,这取决于 str_contains() 的结果。换句话说,这取决于是否找到字符串 Firefox

添加注释

用户贡献的注释 2 条注释

Declan Kelly
10 年前
请注意,Internet Explorer 11 的用户代理字符串中不再包含 MSIE,例如,在安装了 IE11 的 Windows 8 上,我得到以下内容

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 />';
}
?>
Evan Z
3 年前
您好。Edge 是与 IE 不同的浏览器。您不能使用该条件来判断它是否是 Internet Explorer。相反,这意味着这是一个 Edge 浏览器。

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE {
echo
'您正在使用 Edge.<br />';
}
?>
To Top