明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

PHP3中文文檔(轉(zhuǎn))

[摘要]第1章PHP3 入門 什么是PHP3? PHP3.0版本是一種服務(wù)器端HTML-嵌入式腳本描述語言。 PHP3能做什么? 也許PHP3最強大和最重要的特征是他的數(shù)據(jù)庫集成層,使用它完成一個含有數(shù)據(jù)庫功能的網(wǎng)頁是不可置信的簡單。目前支持下面所列的數(shù)據(jù)庫。 Oracle Adabas D Sybase...
第1章PHP3 入門

什么是PHP3?
PHP3.0版本是一種服務(wù)器端HTML-嵌入式腳本描述語言。

PHP3能做什么?
也許PHP3最強大和最重要的特征是他的數(shù)據(jù)庫集成層,使用它完成一個含有數(shù)據(jù)庫功能的網(wǎng)頁是不可置信的簡單。目前支持下面所列的數(shù)據(jù)庫。

Oracle
Adabas D
Sybase
FilePro
MSQL
Velocis
MySQL
Informix
Solid
dBase
ODBC
Unix dbm
PostgreSQL
 

PHP的簡要歷史
PHP從1994年秋天開始孕育,他的創(chuàng)始人是Rasmus Lerdorf。早期沒有發(fā)布的版本是被他用在自己的網(wǎng)頁上來跟蹤有誰來參觀過他的在線個人簡歷。被其他人使用的第一個版本是在1995年發(fā)布的,當(dāng)時叫做Personal Home Page Tools。他包含了一個非常簡單的語法分析引擎,只能理解一些指定的宏和一些Home Page后臺的常見功能,如留言本,計數(shù)器和一些其他的素材。在1995年中期,重寫了這個語法分析引擎并且命名為PHP/FI 2.0版本。FI來源于Rasmus所寫的另一個可以接受Html表單數(shù)據(jù)的程序包。他組合了Personal Home Page Tools 腳本和Form Interpreter,并且加入了對mSQL的支持,于是PHP/FI 2.0誕生了。PHP/FI以驚人的速度發(fā)展,并且其他的人也開始對他的源碼加以改進(jìn)和修改。

很難給出任何精確的統(tǒng)計數(shù)字,但是據(jù)估計到1996年末至少有15,000個WEB站點在使用PHP/FI 2.0,到了1997年中,這個數(shù)字已經(jīng)成長為50,000個,1997年中PHP的發(fā)展也已經(jīng)有了一些變化,他已經(jīng)從Rasmus的寵物項目變成了更加有組織的團體項目。語法分析引擎也由Zeev Suraski 和 Andi Gutmans進(jìn)行了重新改寫,這個引擎構(gòu)成了PHP3的基礎(chǔ)。PHP/FI中的大部分通用代碼都經(jīng)過改寫后引入了PHP3中。

今天(1998年中),有許多商業(yè)的產(chǎn)品如C2's StrongHold web server和Red Hat Linux都開始支持PHP3或PHP/FI,根據(jù)由NetCraft提供的數(shù)字進(jìn)行保守的推斷,現(xiàn)在在世界各地大概有150,000個WEB站點在使用PHP或PHP/FI。從前景上看,在InterNet上這些站點遠(yuǎn)遠(yuǎn)比運行Netscape's flagship Enterprise server的要多。

使用PHP3進(jìn)行HTTP認(rèn)證
只有在PHP以Apache的模塊方式運行的時候才可以使用HTTP認(rèn)證的功能。在Apache的模塊PHP腳本中,可以使用Header()函數(shù)向客戶斷瀏覽器發(fā)送一個”Authentication Required”的消息,使瀏覽器彈出一個用戶名/密碼(username/password)的輸入窗口,當(dāng)用戶輸入用戶名和密碼后,包含PHP腳本的URL將會被再次調(diào)用,使用分別代表用戶名,密碼,和確認(rèn)方式的$PHP_AUTH_USER, $PHP_AUTH_PW,$PHP_AUTH_TYPE變量,F(xiàn)在只有”BASIC”的確認(rèn)方式被支持。

在一個頁面中強迫用戶進(jìn)行身份認(rèn)證的代碼段的例子如下:

 

Example 2-1. HTTP 認(rèn)證舉例:

<?php

if(!isset($PHP_AUTH_USER)) {

Header("WWW-Authenticate: Basic realm=\"My Realm\"");

Header("HTTP/1.0 401 Unauthorized");

echo "Text to send if user hits Cancel button\n";

exit;

}

else {

echo "Hello $PHP_AUTH_USER.<P>";

echo "You entered $PHP_AUTH_PW as your password.<P>";

}

?>

除了簡單的輸出$PHP_AUTH_USER 和 $PHP_AUTH_PW變量的值以外,你還可以檢查用戶名和密碼的合法性,也許是對數(shù)據(jù)庫進(jìn)行查詢,也許是在dbm文件中搜索用戶。

當(dāng)心臭蟲成堆的Internet Explorer瀏覽器,他對Hearders的順序非常挑剔.所以采用在送出HTTP/1.0 401 header 請求之前送出WWW-Authenticate header請求是一個很好的解決方法。

為了阻止一些人寫一些腳本來顯示一個經(jīng)過傳統(tǒng)外部機制驗證過的頁面的密碼,采用如下方式:如果這一頁面使用外部驗證機制,將不會生成PHP_AUTH變量.這樣,$REMOTE_USER變量可以被用來表示已經(jīng)被外部機制驗證的用戶.

注意,上面的方法并不能防止某些人在同一臺服務(wù)器上利用無身份驗證的URL偷取有身份鑒別的URL的密碼。

無論Netscape還是IE,在接到服務(wù)器的401回復(fù)之后,都將清空本地瀏覽器窗口的身份驗證緩存。這種做法可以有效的使用戶登錄退出,從而強迫他們再次輸入他們的用戶名和密碼。一些人使用這個方式來實現(xiàn)“超時”注冊,或者提供登錄退出的按鈕。

這種方法不是標(biāo)準(zhǔn)的HTTP基本身份鑒定所必須的,所以您可能從來都不依靠它。使用Lynx進(jìn)行的測試并沒有弄清楚401服務(wù)器回應(yīng)的身份鑒定,所以如果使用“向前”或“向后”功能將打開源文件(只要信用需求還沒有被改變)。

雖然已經(jīng)指出這種語言不能工作在Microsoft的IIS服務(wù)器上,但是PHP語言CGI版本將受到IIS的限制。

使用PHP建立GIF
PHP并不僅僅可以用來建立HTML輸出。它還可以用來制作GIF圖形文件,甚至制作更簡便的GIF圖象流。要想這樣做,您將需要使用GD函數(shù)庫來編譯PHP源文件。

 

Example 2-2. 使用PHP來創(chuàng)建GIF文件

<?php

Header("Content-type: image/gif");

$string=implode($argv," ");

$im = imagecreatefromgif("images/button1.gif");

$orange = ImageColorAllocate($im, 220, 210, 60);

$px = (imagesx($im)-7.5*strlen($string))/2;

ImageString($im,3,$px,9,$string,$orange);

ImageGif($im);

ImageDestroy($im);

?>

這個例子將被一個頁面使用類似于:<img src=http://cfan.net.cn/info/"button.php3?text">的方法來調(diào)用。其中關(guān)于button.php3的腳本將把這一段文本覆蓋在基本的圖形上(在這里是“images/button1.gif”)然后輸出結(jié)果圖形。這是一個很簡便的方法來防止每當(dāng)用戶希望改變按鍵的文本時候都重新畫一次按鈕圖形。使用這種方法,他們將被動態(tài)的使用。

文件上載支持
PHP有能力接受任何RFC-1867適應(yīng)瀏覽器(包括Netscape Navigator 3.0或以后的版本, Microsoft Internet Explorer 3.0(使用了補丁程序)或以后的版本)的文件上載。這個特性讓用戶可以上載文本和二進(jìn)制文件。使用PHP 的身份鑒定和文件處理函數(shù),您可以完全控制誰可以上載文件和被上載的文件可以做些什么。

可以采用類似下面的建立表單的方法來建立一個文件上載的屏幕。

 

Example 2-3.文件上載表單

<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>

<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">

Send this file: <INPUT NAME="userfile" TYPE="file">

<INPUT TYPE="submit" VALUE="Send File">

</FORM>

其中“_URL_”指向一個PHP的HTML文件。MAX_FILE_SIZE隱藏領(lǐng)域必須先于文件輸入領(lǐng)域,它的值是可以接受的最大的文件大小。該值的單位是字節(jié)。在該目標(biāo)文件中,下列變數(shù)用來定義是否成功的上載了文件:

$userfile:在將要存放上載文件的服務(wù)器上的臨時文件名字。

$userfile_name:在發(fā)送者系統(tǒng)中的初始文件名。

$userfile_size:按字節(jié)計算的上載文件的大小。

$userfile_type:多用途網(wǎng)際郵件擴充協(xié)議類型的文件,如果瀏覽器提供這種信息。一個例子是“image/gif”。

注釋:在這里“userfile”部分是可以變化的,它可以取任何的名字只要在上載表單中類型仍然為“TYPE=file”即可。在上面的例子中,我們選擇它的名字為“userfile”。

文件將被默認(rèn)的存放在服務(wù)器默認(rèn)的臨時目錄下。在PHP運行的環(huán)境下,可以改變環(huán)境變量TMPDIR來更改這個設(shè)置。設(shè)置時,請在PHP腳本沒有運行的情況下使用一個PutEnv()函數(shù)。

接受上載文件的PHP腳本語言將貫徹何種邏輯結(jié)構(gòu)是必須的來決定對上載的文件可以做些什么。例如,用戶可以使用“$file_size”變量來發(fā)送任何或者太小或者太大的文件來嘗試一下結(jié)果。可以使用“$file_type”變量來發(fā)送任何不符合的確定類型標(biāo)準(zhǔn)的文件。無論何中邏輯結(jié)構(gòu),您都需要在臨時目錄中刪除這個文件,或者把它移走。

如果沒有被改名字或移動,那么在請求的最后該文件將被從臨時文件夾中刪除。

請注意,在從客戶端獲得MIME的連接類型之后,“CERN httpd”軟件似乎將剝離任何內(nèi)容而以最初的白板形式出現(xiàn)。在這種場合,“CERN httpd”軟件將不支持上載文件的特性。

HTTP cookie支持
PHP很明顯的支持HTTP cookie。Cookie是一個在遠(yuǎn)程瀏覽器上存儲數(shù)據(jù)和跟蹤或鑒定返回的用戶的結(jié)構(gòu)。您可以使用函數(shù)setcookie()來設(shè)置cookie。Cookie是HTTP文件頭的一部分,所以該Setcookie()函數(shù)必須在任何輸出向瀏覽器發(fā)送前被調(diào)用。這種情況和函數(shù)Header()的限制是類似的。

任何從客戶計算機發(fā)送到您那兒的cookie都將被自動的轉(zhuǎn)化成一個類似于GET和POST方法數(shù)據(jù)的PHP變量。如果您希望給一個cookie指派多個值,只需要在該cookie的名字后面加上“[ ]”即可。關(guān)于更多的細(xì)節(jié)問題請參看setcookie()函數(shù)。

數(shù)據(jù)庫支持
PHP支持大量本地模式和完全ODBC等不同類型的數(shù)據(jù)庫,包括:

Adabas D

MySQL

dBase

Oracle

Empress

PostgreSQL

FilePro

Solid

Informix

Sybase

InterBase

Velocis

mSQL

Unix dbm

正則表達(dá)式格式
正則表達(dá)式在PHP中被用來處理復(fù)雜的文字串。支持正則表達(dá)式的函數(shù)有:

ereg()

ereg replace()

eregi replace()

split()

這些函數(shù)都將正則表達(dá)式作為他們的第一個參數(shù)。PHP使用POSIX擴展規(guī)則表達(dá)式(使用POSIX 1003.2)。要找到所有的關(guān)于POSIX擴展規(guī)則表達(dá)式的描述,請查看包括在PHP發(fā)行版本之內(nèi)的regex man頁面。

 

Example 2-4. Regular expression examples

  ereg("abc",$string);

/* Returns true if "abc"

is found anywhere in $string. */

 

ereg("^abc",$string);

/* Returns true if "abc"

is found at the beginning of $string. */

 

ereg("abc$",$string);

/* Returns true if "abc"

is found at the end of $string. */

 

eregi("(ozilla.[23] MSIE.3)",$HTTP_USER_AGENT);

/* Returns true if client browser

is Netscape 2, 3 or MSIE 3. */

 

ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+ )",

$string,$regs);

/* Places three space separated words

into $regs[1], $regs[2] and $regs[3]. */

 

ereg_replace("^","<BR>",$string);

/* Put a <BR> tag at the beginning of $string. */

ereg_replace("$","<BR>",$string);

/* Put a <BR> tag at the end of $string. */

 

ereg_replace("\n","",$string);

/* Get rid of any carriage return

characters in $string. */

出錯操作
在PHP中有四種類型的錯誤和警告。它們是:

通常函數(shù)錯誤:1
通常警告:2
分析錯誤:4
注釋(警告用戶,可以忽略該信息,但是這個問題可能給您的代碼會帶來一些錯誤):8
信息后面的四個數(shù)字是該信息類型的表示值,把它們加起來作為錯誤報告的級別。卻省的報告級別是7(即1+2+4),或除了“注釋”的其他組合。這個級別能夠通過改變php3.ini文件中錯誤報告指示的方法來改變。它也可以在用戶的httpd.conf文件中改變php3錯誤報告的方法來設(shè)置,或者在運行的時候使用腳本語言函數(shù)error reporting()來改變。

所有的PHP表達(dá)式都可以使用前綴“@”來調(diào)用,對于這種特殊的表達(dá)式將關(guān)閉錯誤報告。如果一個錯誤在運行這樣一個表達(dá)式時發(fā)生了,而且“track error”特性被置為可用,那么用戶可以在全局變量$php_errormsg中找到這些錯誤信息。






相關(guān)文章