本節(jié)演示了根據(jù)瀏覽器類型如何使用PHP可以提供動(dòng)態(tài)頁(yè)面內(nèi)容,像隨機(jī)生成的數(shù)字或用戶輸入。它還展示了客戶端瀏覽器是怎么可以被重定向的。
PHP 創(chuàng)建一些有用的環(huán)境變量,它們可以在用于設(shè)置 php 環(huán)境的 phpinfo.php 頁(yè)面中看到 PHP 配置。
被 PHP 設(shè)置環(huán)境變量集中一個(gè)變量 HTTP_USER_AGENT 是用來(lái)標(biāo)識(shí)用戶的瀏覽器和操作系統(tǒng)。
PHP 提供了 getenv() 函數(shù)來(lái)訪問(wèn)所有的環(huán)境變量的值。
HTTP_USER_AGENT 環(huán)境變量中包含的信息適合于瀏覽器,可用于創(chuàng)建動(dòng)態(tài)內(nèi)容。
下面的例子演示了如何識(shí)別客戶瀏覽器和操作系統(tǒng)。
注意:函數(shù) preg_match() 是在 PHP 正則表達(dá)式匹配函數(shù)
<html>
<body>
<?php
$viewer = getenv( "HTTP_USER_AGENT" );
$browser = "An unidentified browser";
if( preg_match( "/MSIE/i", "$viewer" ) )
{
$browser = "Internet Explorer";
}
else if( preg_match( "/Netscape/i", "$viewer" ) )
{
$browser = "Netscape";
}
else if( preg_match( "/Mozilla/i", "$viewer" ) )
{
$browser = "Mozilla";
}
$platform = "An unidentified OS!";
if( preg_match( "/Windows/i", "$viewer" ) )
{
$platform = "Windows!";
}
else if ( preg_match( "/Linux/i", "$viewer" ) )
{
$platform = "Linux!";
}
echo("You are using $browser on $platform");
?>
</body>
</html>
這是在我的機(jī)器上產(chǎn)生后的結(jié)果??赡茉诓煌碾娔X依據(jù)所運(yùn)行的環(huán)境會(huì)產(chǎn)生不同的結(jié)果。
You are using Mozilla! on Windows!
PHP rand() 函數(shù)用于生成一個(gè)隨機(jī)數(shù)。這個(gè)函數(shù)可以會(huì)隨機(jī)地在一個(gè)給定的范圍內(nèi)生成數(shù)字。隨機(jī)數(shù)生成器打亂數(shù)字生成的規(guī)律。通過(guò)使用srand()函數(shù),給它特定的種子數(shù)值作為它的參數(shù)。
以下示例演示了如何每次顯示四個(gè)不同的圖像的圖片:
<html>
<body>
<?php
srand( microtime() * 1000000 );
$num = rand( 1, 4 );
switch( $num )
{
case 1: $image_file = "/home/images/alfa.jpg";
break;
case 2: $image_file = "/home/images/ferrari.jpg";
break;
case 3: $image_file = "/home/images/jaguar.jpg";
break;
case 4: $image_file = "/home/images/porsche.jpg";
break;
}
echo "Random Image : <img src=$image_file />";
?>
</body>
</html>
最重要的事情是需要注意在處理 HTML 表單和 PHP 頁(yè)面時(shí),任何形式的表單元素都會(huì)提交到您的 PHP 腳本。試試下面的例子將在源代碼 test.php 腳本運(yùn)行。
<?php
if( $_POST["name"] || $_POST["age"] )
{
echo "Welcome ". $_POST['name']. "<br />";
echo "You are ". $_POST['age']. " years old.";
exit();
}
?>
<html>
<body>
<form action="<?php $_PHP_SELF ?>" method="POST">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
$ _PHP_SELF
用于輸出 PHP 腳本名稱,當(dāng)你點(diǎn)擊“提交”按鈕時(shí)然后,PHP 腳本將被調(diào)用,將會(huì)產(chǎn)生以下結(jié)果: PHPheader()函數(shù)提供原始 HTTP headers 到瀏覽器,可用于重定向到另一個(gè)位置。重定向腳本應(yīng)該在頁(yè)面的頂端,以防止加載頁(yè)面的其他部分。
Location:用來(lái)指定目標(biāo)位置:header()函數(shù)使用 url 作為參數(shù)。在調(diào)用該函數(shù)之后使用exit() 函數(shù)可以阻止其他代碼的解析
下面的例子演示了如何將瀏覽器請(qǐng)求重定向到另一個(gè) web 頁(yè)面。試試這個(gè)例子 test.php 源代碼的腳本。
<?php
if( $_POST["location"] )
{
$location = $_POST["location"];
header( "Location:$location" );
exit();
}
?>
<html>
<body>
<p>Choose a site to visit :</p>
<form action="<?php $_PHP_SELF ?>" method="POST">
<select name="location">
<option value="http://w3c.org">
World Wise Web Consortium
</option>
<option value="http://www.google.com">
Google Search Page
</option>
</select>
<input type="submit" />
</form>
</body>
</html>
某個(gè)時(shí)候顯示“文件下載”對(duì)話框是想要的功能,你想給使用選項(xiàng)當(dāng)用戶點(diǎn)擊一個(gè)鏈接,它就會(huì)彈出一個(gè)“文件下載”顯示框給用戶而不是顯示實(shí)際內(nèi)容。通過(guò) HTTP 頭協(xié)議這是非常容易的。
HTTP 頭協(xié)議將不同于實(shí)際的協(xié)議,我們發(fā)送的 Content-Type為text/htmlnn。在這種情況下,將application/octet-stream和實(shí)際文件名稱將連接到一起。
例如,如果你想要從一個(gè)給定的文件名文件下載鏈接,那么它的語(yǔ)法將如下。
#!/usr/bin/perl
# HTTP Header
print "Content-Type:application/octet-stream; name=\"FileName\"\r\n";
print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n";
# Actual File Content
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) )
{
print("$buffer");
}