WAP與PHP程序設(shè)計(jì)之基礎(chǔ)篇
WAP的發(fā)展離不開其WWW的底蘊(yùn),畢竟,整個(gè)WAP協(xié)議的制定參照了WWW的模型,并且盡可能地沿用了Internet的諸多標(biāo)準(zhǔn)和技術(shù),如WML語言脫胎于HTML與XML,WMLScript與傳統(tǒng)的腳本語言也很相似。的確,WAP雖然是個(gè)新名詞,但是它卻與傳統(tǒng)的國(guó)際互聯(lián)網(wǎng)密不可分地結(jié)合著,在結(jié)構(gòu)上如此,在技術(shù)上更是如此。 在WAP協(xié)議中提到WAP頁面所使用的標(biāo)記語言為WML,當(dāng)需要進(jìn)行較高級(jí)的操作,如使用終端機(jī)的某些資源時(shí),可以使用WMLScript腳本語言,這兩種語言很簡(jiǎn)單,甚至可以用簡(jiǎn)陋來形容,特別是它們對(duì)數(shù)據(jù)庫的操作幾乎無能為力,這種'缺陷'與WAP廣闊的商務(wù)和應(yīng)用前景格格不入,但我們并不是無能為力的,由于WAP和WWW的交融,我們?nèi)匀豢梢允褂肳WW的技術(shù)與資源來解決數(shù)據(jù)庫的訪問問題,因?yàn)楫吘苟鄶?shù)數(shù)據(jù)庫仍處于有線網(wǎng)絡(luò)內(nèi)。 目前最流行的網(wǎng)頁編程語言和數(shù)據(jù)庫的搭配是什么?相信很多人會(huì)說出'PHP'與'MySQL'這兩個(gè)名字。它們屬于WWW或者有線互聯(lián)網(wǎng)的范疇,由于使用方便與功能強(qiáng)大的特點(diǎn)而美名傳播,那么它們能夠?yàn)閃AP服務(wù)嗎?答案是肯定的。不熟悉WAP或者PHP的人或許有些不解,畢竟在傳統(tǒng)意義上PHP提供的是WWW的內(nèi)容與服務(wù),對(duì)于WAP,它們能'兼容'嗎?
PHP粗解
看了WAP的介紹,大家應(yīng)該開始逐步理解PHP為何仍能為WAP服務(wù)了。PHP與HTML、WML、Javascript、Java都不一樣,它是在服務(wù)器端運(yùn)行的,而Javascript、Java等都運(yùn)行在瀏覽器端,相對(duì)于WAP,WMLScript運(yùn)行于客戶機(jī)端,但是,以上的這些語言都可以很容易與PHP結(jié)合起來。
PHP具有很大的靈活性,在WWW中,它可以生成所需要的任何HTML代碼,甚至Javascript代碼。同樣,在WAP中,我們?nèi)匀豢梢岳肞HP這種動(dòng)態(tài)、靈活的特點(diǎn),生成任意的WML代碼,這樣,PHP自然能夠?yàn)閃AP服務(wù)。 之所以使用PHP來提供WAP服務(wù),除了它靈活的特點(diǎn)外,還由于PHP可以方便的使用數(shù)據(jù)庫。用戶可以使用PHP存取Oracle、Sybase、MS SQL、MySQL、dBase、Informix等任何支持ODBC標(biāo)準(zhǔn)的數(shù)據(jù)庫,這點(diǎn)正好迎合了WAP商務(wù)的需求。
在實(shí)用中,一般需要建立PHP文件,當(dāng)用戶向服務(wù)器發(fā)出瀏覽該P(yáng)HP文件的請(qǐng)求時(shí),服務(wù)器將根據(jù)文件中的代碼產(chǎn)生相應(yīng)的HTML或WML內(nèi)容,并發(fā)送給瀏覽器或WAP終端。 如想獲取關(guān)于PHP的信息,可以前往http://www.php.com查看。
PHP-WML
PHP的系統(tǒng)平臺(tái)、工作方式、安裝方法,這些都不在本文的討論范圍內(nèi),畢竟我們的重點(diǎn)是PHP如何與WAP協(xié)作。一般而言,為了能讓PHP工作,我們需要帶有PHP模塊的Web服務(wù)器,或者說支持PHP的服務(wù)器,Apache是世界上最流行的Web服務(wù)器,另外,我們還需要安裝PHP軟件以及如MySQL這樣的數(shù)據(jù)庫,具體內(nèi)容可以查閱相關(guān)書籍或網(wǎng)站。下面我們討論如何讓PHP產(chǎn)生WML代碼。 在WWW中,PHP產(chǎn)生的第一行內(nèi)容往往是: content-type: text/html 但是,WAP終端是讀不懂這樣的標(biāo)題的。WAP終端從服務(wù)器下載的單位是Deck,瀏覽的單位是Card,一般一個(gè)Deck就組成一個(gè)WML文件。那么,為WAP服務(wù)時(shí),PHP文件中往往需要包含如下的代碼:
header('Content-type:text/vnd.wap.wml'); echo '<xml version='1.01'>n' echo'<! DOCTYPE wml PUBLIC '//WAPFORUM//DTD WML 1.1//EN''http://www.wapforum.org//DTD//wml_1.1.xml'>n'
以上三行代碼產(chǎn)生了WML文件(Deck)的文件頭,這樣WAP終端就可以識(shí)別所下載的Deck是否WML格式,并且接著顯示余下的Deck內(nèi)容。 下面是一個(gè)最簡(jiǎn)單的Deck,它在WAP終端上顯示'Hello World'。
<?xml version='1.0' encoding='ISO-8859-1'?> <! DOCTYPE wml PUBLIC '//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org//DTD//wml_1.1.xml'> </xml> <!--Nokia Parser Info:Phone = Nokia 7110; Height = 90; Width = 130; CurrentDeckSize = 38; MaxDeckSize = 1600; CardsOnEachLine = 5; CardsVerticalGap = 30--> </card ordered='true' newcontext='false'> <p align='left'> Hello World </p> </card> </wml>;
我們建立的相應(yīng)的PHP文件如下:
<?php header('Content-type:text/vnd.wap.wml'); echo '<?xml version='1.0'>n'; echo '<!DOCTYPE wml PUBLIC '//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org//DTD//wml_1.1.xml'>n'; echo 'n'; echo '<!--Nokia Parser Info: Phone = Nokia 7110; Height = 90; Width = 130; CurrentDeckSize = 38; MaxDeckSize = 1600; CardsOnEachLine = 5; CardsVerticalGap = 30-->n'; echo '<card ordered='true' newcontext='false'> '; echo '<p align='left'>n'; echo 'Hello World'; echo '</p>'; echo '</card>'; echo '</wml>'; ?>;
我們可以將該文件存為index.php3,當(dāng)WAP終端瀏覽該網(wǎng)站時(shí),Web服務(wù)器會(huì)自動(dòng)根據(jù)index.php3的內(nèi)容產(chǎn)生如上所列的WML內(nèi)容,并發(fā)送給網(wǎng)關(guān)進(jìn)行處理。WAP終端收到該Deck后,將會(huì)在顯示屏上顯示'Hello World'的字樣。 以上是關(guān)于PHP在WAP中最簡(jiǎn)單的應(yīng)用,它只是簡(jiǎn)單地產(chǎn)生若干行WML代碼,并沒有牽扯到數(shù)據(jù)庫的訪問。其實(shí),PHP強(qiáng)大的功能可以為WAP提供很豐富的服務(wù),而最值得挖掘的就是其強(qiáng)大的數(shù)據(jù)庫支持,這些將在以后的文章中討論。
