让我们编写一些更实用的脚本,例如查看访问者正在使用的浏览器。要执行此操作,请检查用户的代理字符串,该字符串是从浏览器发送的HTTP请求的一部分。此信息存储在变量中。在PHP中,变量总是以美元符号开头。现在关注的变量是$_SERVER['HTTP_USER_AGENT']。
提示:
$_SERVER是一个特殊的PHP保留变量,包含Web服务器提供的所有信息,称为超全局变量。有关详细信息,请参见本手册中的“超全局”。
要查看变量,请执行以下操作:
示例#1输出变量(数组元素)
<?php echo $_SERVER['HTTP_USER_AGENT']; ?>
此脚本的输出如下:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
PHP有各种各样的变量。在上面的例子中,输出了数组的元素。数组是一类非常有用的变量。
$_SERVER只是PHP自动全球化的变量之一。有关这些变量的列表,请参阅“预定义变量”部分,或在上一部分的示例中查看phpinfo()函数的输出。
您可以将多个PHP语句添加到一个PHP令牌中,或者创建代码块来执行简单的回声或更高的操作。例如,如果需要标识Internet Explorer,则可以执行以下操作:
使用Example#2流控制和函数
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { echo '正在使用 Internet Explorer。<br />'; } ?>
此脚本的输出如下:
正在使用 Internet Explorer。<br />
这里介绍一些新的原则。上面使用的是if语句。如果用户熟悉C语言的基本语法,他们应该明白。否则,您必须拿起PHP入门书,阅读前2-3章,或阅读“语言”部分。
需要引入的第二个原则是调用strpos()函数。strpos()是PHP的内置函数,用于从一个字符串中搜索另一个字符串。例如,$_必须在SERVER['HTTP_USER_AGENT'](所谓的黑栈)变量中查找'MSIE’。如果在这堆干草中发现字符串(即所谓的针)(“寻找草中的针”),则函数返回从干草堆开头的针的位置。否则,返回假。如果函数不返回假,则if将条件评估为真,并在方括号{}中运行代码。否则,不运行代码。您可以使用其他函数(如if、else和strtoupper()或strlen())来自己创建类似的脚本。
下面将进一步说明即使在PHP码块的中途,也可以进出PHP模式的方法。
示例3HTML和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()函数的返回值是真还是假,即是否找到字符串“MSIE”后,最终只向浏览器发送一个HTML块。
请注意,Internet Explorer 11在其用户代理字符串中不再包含MSIE,例如,在使用IE11的Windows 8上,我得到以下信息:
Mozilla/5.0(Windows NT 6.3;WOW64;Trident/7.0;rv:11.0)像壁虎一样
因此,如果您想包含IE11的测试,上面的代码将更改为:
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) { echo 'You are using Internet Explorer.<br />'; } ?>
你好,Edge是与IE不同的浏览器。您不能使用该条件判断它是Internet Explorer。相反,这意味着这是一个边缘浏览器。
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE { echo 'You are using Edge.<br />'; } ?>