本节将将Web的一些基本概念,并演示PHP如何根据浏览器类型,随机生成的数字或用户输入提供动态内容。它还演示了如何将客户端浏览器重定向。
识别浏览器和平台
PHP创建了一些有用的环境变量,可以查看PHP环境的phpinfo()
函数输出的页面中看到。
PHP设置的环境变量中有一个是HTTP_USER_AGENT
,它标识用户的浏览器和操作系统。
PHP提供了一个函数getenv()
来访问所有环境变量的值。 包含在HTTP_USER_AGENT
环境变量中的信息可用于创建适合浏览器的动态内容。
以下示例演示了如何识别客户端浏览器和操作系统。
注 - 函数
preg_match()
在PHP正则表达式小节中讨论。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>用户浏览器示例</title>
</header>
<body>
<?php
function getBrowser() {
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version = "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) {
$bname = 'Internet Explorer';
$ub = "MSIE";
} elseif(preg_match('/Firefox/i',$u_agent)) {
$bname = 'Mozilla Firefox';
$ub = "Firefox";
} elseif(preg_match('/Chrome/i',$u_agent)) {
$bname = 'Google Chrome';
$ub = "Chrome";
}elseif(preg_match('/Safari/i',$u_agent)) {
$bname = 'Apple Safari';
$ub = "Safari";
}elseif(preg_match('/Opera/i',$u_agent)) {
$bname = 'Opera';
$ub = "Opera";
}elseif(preg_match('/Netscape/i',$u_agent)) {
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}else {
$version= $matches['version'][1];
}
}else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version == null || $version == "") {$version = "?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
// now try it
$ua = getBrowser();
$yourbrowser = "Your browser: " . $ua['name'] . " " . $ua['version'] .
" on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
print_r($yourbrowser);
?>
</body>
</html>
这个结果可能会因计算机而异。这是在笔者的机器上产生以下结果 -
随机显示图像
PHP rand()
函数用于生成一个随机数。该函数可以在给定范围内生成数字。 随机数发生器应该给定种子,以防止产生规则的数字模式。 这是通过使用指定种子号作为其参数的srand()
函数实现的。
以下示例演示了每次如何在四个图像中显示不同的图像 -
<?php
srand( microtime() * 1000000 );
$num = rand( 1, 4 );
switch( $num ) {
case 1: $image_file = "/images/logo.png";
break;
case 2: $image_file = "/images/php.png";
break;
case 3: $image_file = "/images/java.png";
break;
case 4: $image_file = "/images/python.png";
break;
}
echo "Random Image : <img src=$image_file />";
?>
执行上面示例代码,得到以下结果 -
使用HTML表单
处理HTML表单和PHP时最重要的一点是,HTML页面中的任何表单元素都会自动提供给PHP脚本。
将源代码放在form.php
脚本中,试试下面的例子。
<?php
ini_set("display_errors", "Off");
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>表单处理示例</title>
</head>
<?php
if( $_POST["name"] || $_POST["age"] ) {
if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
die ("invalid name and name should be alpha");
}
echo "欢迎, ". $_POST['name']. "<br />";
echo "你的年龄:". $_POST['age']. " 岁。";
exit();
}
?>
<form action = "<?php $_PHP_SELF ?>" method = "POST">
名字: <input type = "text" name = "name" />
年龄: <input type = "text" name = "age" />
<input type = "submit" value="提交"/>
</form>
</body>
</html>
执行上面示例代码,得到以下结果 -
说明:
PHP默认变量
$_PHP_SELF
用于PHP脚本名称,当点击“提交”按钮时,同样的PHP脚本将被调用,并将产生结果。method = "POST"
用于将用户数据提交到服务器脚本。有两种将数据提交到服务器脚本的方法,这些方法在PHP GET&POST章节讨论。
浏览器重定向
PHP header()
函数向浏览器提供原始的HTTP头信息,并可用于将其重定向到另一个位置。 重定向脚本应该位于页面的顶部,以防止加载页面的其他部分。
目标由Location:
头指定为header()
函数的参数。 在调用这个函数之后,exit()
函数可以用来停止解析剩下的代码。
以下示例演示了如何将浏览器请求重定向到另一个网页。测试源代码放在redirect.php
脚本中。
<?php
ini_set("display_errors", "Off");
if( $_POST["location"] ) {
$location = $_POST["location"];
header( "Location:$location" );
exit();
}
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>网页跳转示例</title>
</header>
<body>
<p>选择要访问的网站 :</p>
<form action = "<?php $_SERVER['PHP_SELF'] ?>" method ="POST">
<select name = "location">.
<option value = "http://www.yiibai.com">
易百教程
</option>
<option value = "http://www.baidu.com">
百度
</option>
</select>
<input type = "submit" value="提交"/>
</form>
</body>
</html>
执行上面示例代码,得到以下结果 -