直播中
PHPlet是什么?
很簡單,它是一個(gè)使用PHP編寫的Web服務(wù)器,可以替代我們常用的Apache或IIS。
為什么要介紹PHPlet?
因?yàn)樗荘HPer們學(xué)習(xí)Web服務(wù)器原理的捷徑。
因?yàn)樗某绦蚪Y(jié)構(gòu)很好,類似Java的面向?qū)ο缶幊?,有很好的參考價(jià)值。
因?yàn)槲艺J(rèn)為PHP5和PHPlet相繼發(fā)布穩(wěn)定版本后,PHP5+PHPlet+SQLite(PPS)將是小型應(yīng)用、程序演示的另外一種選擇。
現(xiàn)在大部分的小型應(yīng)用或者程序演示都是把Apache+PHP+MySQL(APM結(jié)構(gòu))做成exe或rpm安裝包,它的容量在8M-45M左右。如果使用了PPS結(jié)構(gòu)整個(gè)系統(tǒng)將會(huì)縮減到2-3M之內(nèi)(SQLite是嵌入式數(shù)據(jù)庫),而且省去了對Apache和MySQL的依賴。
PHPlet的運(yùn)行方式?
PHPlet使用php_socktes.dll實(shí)現(xiàn)端口偵聽。
PHPlet是常駐內(nèi)存的,可以使用srvany.exe將它作為NT的服務(wù)運(yùn)行。
PHPlet的多進(jìn)程功能只能運(yùn)行在Linux、FreeBSD、*unx系統(tǒng)等系統(tǒng)下,這是因?yàn)镻HP的“進(jìn)程控制函數(shù)庫”不支持Win32平臺。
好了,廢話不多說,馬上進(jìn)入我們的PHPlet之旅。
一.資源下載:
l PHP
ZIP-Format: http://cn.php.net/download/
TGZ-Format: http://cn.php.net/download/
要下載最新的穩(wěn)定版本,這樣會(huì)得到更好的性能和穩(wěn)定性。我用的是PHP4.3.6,寫這篇文檔時(shí)PHP5還在測試階段。
要下載ZIP包而不是安裝包,因?yàn)榘惭b版(其實(shí)是簡化版)中沒有我們需要的DLL動(dòng)態(tài)鏈接庫。
l PHPlet
ZIP-Format: http://phplet.sourceforge.net/
TGZ-Format: http://phplet.sourceforge.net/
要下載最新的穩(wěn)定版本,這樣會(huì)得到更好的性能和穩(wěn)定性。我用的是PHPlet0.0.7,寫這篇文檔時(shí)還沒有穩(wěn)定版本。
二.安裝:
l PHP
解壓縮到D:\PHP4:
如果你是初學(xué)者最好釋放到我說的目錄,否則后面會(huì)帶來一些麻煩。
創(chuàng)建cli_php.exe:
將D:\PHP4\cli\php.exe復(fù)制到D:\PHP4\cli_php.exe。
它是PHPlet的啟動(dòng)程序,復(fù)制到D:\PHP4是為了能跟php.exe共享php.ini。
PEAR的安裝:
PHPlet擴(kuò)展了Pear的類庫,那么我們先來安裝Pear。
前提是你的電腦處于連線狀態(tài),因?yàn)榘惭b程序需要下載一部分組件(還沒研究如何不下載)。
另外你的身份必須是Administrator,因?yàn)榘惭b程序中會(huì)在Windows目錄下創(chuàng)建pear.ini。
一切準(zhǔn)備就緒后運(yùn)行D:\PHP4\go-pear.bat開始安裝。
第一步. 直接按回車(也可以CTRL+C退出:D):
Welcome to go-pear!
Go-pear will install the 'pear' command and all the files needed by
it. This command is your tool for PEAR installation and maintenance.
Go-pear also lets you download and install the PEAR packages bundled
with PHP: DB, Net_Socket, Net_SMTP, Mail, XML_Parser, PHPUnit-0.6.2.
If you wish to abort, press Control-C now, or press Enter to continue:
第二步. 輸入Pear下載地址:
用來指定Pear組件的下載地址和端口,可以直接按回車。
HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none::
第三步. PHP路徑設(shè)置:
一共7項(xiàng),輸入相應(yīng)的序號就可以修改,輸入"all"是修改全部,一般情況下只需要修改第7項(xiàng)。
選擇第7項(xiàng)后會(huì)彈出一個(gè)windows的選擇目錄對話框,選擇D:\PHP4。
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation prefix : D:\PHP4
2. Binaries directory : $prefix
3. PHP code directory ($php_dir) : $prefix\pear
4. Documentation base directory : $php_dir\docs
5. Data base directory : $php_dir\data
6. Tests base directory : $php_dir\tests
7. php.exe path :
1-7, 'all' or Enter to continue:
4.確認(rèn):
確認(rèn)一些組件是否安裝,這里要輸入"Y",因?yàn)镻HPlet正用到他們。
The following PEAR packages are bundled with PHP: DB, Net_Socket, Net_SMTP,
Mail, XML_Parser, PHPUnit-0.6.2.
Would you like to install these as well? [Y/n] :
5.安裝或下載組件:
接下來請稍等幾分鐘,安裝程序會(huì)自動(dòng)下載組件并安裝。
如果"PHPUnit-0.6.2"下載出錯(cuò)將會(huì)報(bào)錯(cuò),這時(shí)就要檢查一下你的網(wǎng)絡(luò)連接了。(只要網(wǎng)絡(luò)正常一般不會(huì)有問題,你可以訪問http://pear.php.net試試)
Loading zlib: ok
Using local package: PEAR.............ok
Using local package: Archive_Tar......ok
Using local package: Console_Getopt....ok
Using local package: XML_RPC..........ok
Bootstrapping: PEAR...................(local) ok
Bootstrapping: Archive_Tar............(local) ok
Bootstrapping: Console_Getopt.........(local) ok
Using local package: DB...............ok
Using local package: Net_Socket.......ok
Using local package: Net_SMTP.........ok
Using local package: Mail.............ok
Using local package: XML_Parser.......ok
Downloading package: PHPUnit-0.6.2....
好了,到這里Pear已經(jīng)安裝完畢。
修改php.ini:
將D:\PHP4\php.ini-dist改名為php.ini,然后打開。
找到:
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
改為:
; Windows: "\path1;\path2"
include_path = ".;D:\PHP4\includes;D:\PHP4\PEAR"
找到:extension_dir = "./" 改為:extension_dir = "D:\PHP4\extensions\"
找到:;extension=php_sockets.dll 改為:extension=php_sockets.dll
l PHPlet
解壓縮到D:\PHP4\PHPlet:
如果你是初學(xué)者最好釋放到我說的目錄,否則后面會(huì)帶來一些麻煩。
更改配置文件:
打開D:\PHP4\PHPlet\config\phplet.conf
"WEB_ROOT" 修改為:"D:\\PHP4\\PHPlet\\www"
"HTTP_HOSTNAME" 修改為:"localhost"
"HTTP_HOSTPORT" 修改為:"8080"
"HTTP_SERVER_MODE" 修改為:"sequential"
"HTTP_SERVER_DEBUG" 修改為:"false"
"PHP_EXECUTABLE" 修改為:"D:\\PHP4\\php.exe"
"CLASSLOADER_SINTAX_CHECK" 修改為:"false"
更改啟動(dòng)文件:
打開D:\PHP4\PHPlet\bin\phpletstart.bat
link:http://www.knowsky.com
"PHP_EXE" 修改為:D:\PHP4\cli_php.exe
三.開始!啟動(dòng)服務(wù)器!
進(jìn)入到D:\PHP4\PHPlet\bin,雙擊phpletstart.bat啟動(dòng)服務(wù)。
好了,打開瀏覽器輸入http://localhost:8080/phplet/HelloWorld看一下效果吧。
四.性能測試
發(fā)現(xiàn)只要運(yùn)行一次,無論對HelloWorld.php做任何修改(甚至刪除),也不會(huì)改變第二次刷新的結(jié)果(跟Java Servlet很像吧?),除非重新啟動(dòng)服務(wù)器。所以我感覺它的性能一定很棒,不出所料,請看我的測試結(jié)果:
服務(wù)器A(PHP4+PHPlet),特別選了臺很爛的 AMD K6-2 400 + 128M。
客戶機(jī)B(Windows2003+IE6),P42.6G + 500M
客戶機(jī)B輸入網(wǎng)址 http://192.168.0.15:8080/PHPler/HelloWord.php 然后按住F5持續(xù)1分鐘,服務(wù)器A占用CPU一直持續(xù)在60%。如果是Apache2+PHP4(CGI模式)以這樣的頻率刷新將會(huì)持續(xù)100%,時(shí)間長后有可能會(huì)沾光虛擬內(nèi)存!
當(dāng)然了,上面只是片面的測試,做為WEB服務(wù)更主要的還是穩(wěn)定,因?yàn)闀r(shí)間關(guān)系也沒功夫更詳細(xì)的測試。大家可以作更多測試后再一起討論。
五.注意事項(xiàng)
1. 上面說過PHPlet編程有點(diǎn)類似Java Servlet,只要運(yùn)行一次無論對.php作任何更改(甚至刪除),也不會(huì)改變第二次刷新的結(jié)果。
2. PHPlet的HTTP_HOSTNAME(主機(jī)名)最好設(shè)置成你的IP而不是localhost,否則其它主機(jī)無法通過你的IP訪問。
3. 程序中不要使用exit,要使用return退出,否則將會(huì)關(guān)閉PHPlet服務(wù)器。
4. 應(yīng)該用$response->write()方法輸入字符串,因?yàn)閜rint或echo會(huì)將字符串輸出到終端上。
5. PHPlet不支持虛擬目錄和虛擬主機(jī)功能。
六.結(jié)束語
寫這篇文章之前并沒有接觸過Pear、PHPlet和Socktes函數(shù)庫,所以有些術(shù)語可能說得不夠準(zhǔn)確,歡迎指正!
對PHPlet和其他Web服務(wù)器熟悉的朋友希望能相互交流,如果你有任何問題也可以寫信給我。