PHP Conference Japan 2024

一些有用的内容

现在让我们做一些更有用的事情。我们将检查访问者使用的是什么类型的浏览器。为此,我们检查浏览器作为 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'](称为干草堆)中查找'Firefox'(称为针)。如果在干草堆中找到针,则该函数返回 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是否被找到。

添加注释

用户贡献的注释 1 条注释

170
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 />';
}
?>
To Top