PHPlet是什麼?
很簡單,它是一個使用PHP編寫的Web服務器,可以替代我們常用的Apache或IIS。
為什麼要介紹PHPlet?
因為它是PHPer們學習Web服務器原理的捷徑。
因為它的程序結構很好,類似Java的面向對象編程,有很好的參考價值。
因為我認為PHP5和PHPlet相繼發布穩定版本後,PHP5+PHPlet+SQLite(PPS)將是小型應用、程序演示的另外一種選擇。
現在大部分的小型應用或者程序演示都是把Apache+PHP+MySQL(APM結構)做成exe或rpm安裝包,它的容量在8M-45M左右。如果使用了PPS結構整個系統將會縮減到2-3M之內(SQLite是嵌入式數據庫),而且省去了對Apache和MySQL的依賴。
PHPlet的運行方式?
PHPlet使用php_socktes.dll實現端口偵聽。
PHPlet是常駐內存的,可以使用srvany.exe將它作為NT的服務運行。
PHPlet的多進程功能只能運行在Linux、FreeBSD、*unx系統等系統下,這是因為PHP的“進程控制函數庫”不支持Win32平台。
好了,廢話不多說,馬上進入我們的PHPlet之旅。
一.資源下載:
l PHP
ZIP-Format: http://cn.php.net/download/
TGZ-Format: http://cn.php.net/download/
要下載最新的穩定版本,這樣會得到更好的性能和穩定性。我用的是PHP4.3.6,寫這篇文檔時PHP5還在測試階段。
要下載ZIP包而不是安裝包,因為安裝版(其實是簡化版)中沒有我們需要的DLL動態鏈接庫。
l PHPlet
ZIP-Format: http://phplet.sourceforge.net/
TGZ-Format: http://phplet.sourceforge.net/
要下載最新的穩定版本,這樣會得到更好的性能和穩定性。我用的是PHPlet0.0.7,寫這篇文檔時還沒有穩定版本。
二.安裝:
l PHP
解壓縮到D:\PHP4:
如果你是初學者最好釋放到我說的目錄,否則後面會帶來一些麻煩。
創建cli_php.exe:
將D:\PHP4\cli\php.exe復制到D:\PHP4\cli_php.exe。
它是PHPlet的啟動程序,復制到D:\PHP4是為了能跟php.exe共享php.ini。
PEAR的安裝:
PHPlet擴展了Pear的類庫,那麼我們先來安裝Pear。
前提是你的電腦處於連線狀態,因為安裝程序需要下載一部分組件(還沒研究如何不下載)。
另外你的身份必須是Administrator,因為安裝程序中會在Windows目錄下創建pear.ini。
一切准備就緒後運行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:[email protected]:port), or Enter for none::
第三步. PHP路徑設置:
一共7項,輸入相應的序號就可以修改,輸入"all"是修改全部,一般情況下只需要修改第7項。
選擇第7項後會彈出一個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.確認:
確認一些組件是否安裝,這裡要輸入"Y",因為PHPlet正用到他們。
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.安裝或下載組件:
接下來請稍等幾分鐘,安裝程序會自動下載組件並安裝。
如果"PHPUnit-0.6.2"下載出錯將會報錯,這時就要檢查一下你的網絡連接了。(只要網絡正常一般不會有問題,你可以訪問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已經安裝完畢。
修改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:
如果你是初學者最好釋放到我說的目錄,否則後面會帶來一些麻煩。
更改配置文件:
打開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:\PHP4\PHPlet\bin\phpletstart.bat
link:http://www.knowsky.com
"PHP_EXE" 修改為:D:\PHP4\cli_php.exe
三.開始!啟動服務器!
進入到D:\PHP4\PHPlet\bin,雙擊phpletstart.bat啟動服務。
好了,打開浏覽器輸入http://localhost:8080/phplet/HelloWorld看一下效果吧。
四.性能測試
發現只要運行一次,無論對HelloWorld.php做任何修改(甚至刪除),也不會改變第二次刷新的結果(跟Java Servlet很像吧?),除非重新啟動服務器。所以我感覺它的性能一定很棒,不出所料,請看我的測試結果:
服務器A(PHP4+PHPlet),特別選了台很爛的 AMD K6-2 400 + 128M。
客戶機B(Windows2003+IE6),P42.6G + 500M
客戶機B輸入網址 http://192.168.0.15:8080/PHPler/HelloWord.php 然後按住F5持續1分鐘,服務器A占用CPU一直持續在60%。如果是Apache2+PHP4(CGI模式)以這樣的頻率刷新將會持續100%,時間長後有可能會沾光虛擬內存!
當然了,上面只是片面的測試,做為WEB服務更主要的還是穩定,因為時間關系也沒功夫更詳細的測試。大家可以作更多測試後再一起討論。
五.注意事項
1. 上面說過PHPlet編程有點類似Java Servlet,只要運行一次無論對.php作任何更改(甚至刪除),也不會改變第二次刷新的結果。
2. PHPlet的HTTP_HOSTNAME(主機名)最好設置成你的IP而不是localhost,否則其它主機無法通過你的IP訪問。
3. 程序中不要使用exit,要使用return退出,否則將會關閉PHPlet服務器。
4. 應該用$response->write()方法輸入字符串,因為print或echo會將字符串輸出到終端上。
5. PHPlet不支持虛擬目錄和虛擬主機功能。
六.結束語
寫這篇文章之前並沒有接觸過Pear、PHPlet和Socktes函數庫,所以有些術語可能說得不夠准確,歡迎指正!
對PHPlet和其他Web服務器熟悉的朋友希望能相互交流,如果你有任何問題也可以寫信給我。
為中國的PHP事業貢獻自己微薄的力量 ---- 毛松<[email protected]>