本人主要是做ASP.NET開發的,但有時候也會接觸到PHP,而且我認為PHP有很多源碼值得學習,我們不是學習PHP代碼的寫法,而是學習源碼的實現思路,或者免強叫為算法。
作為一名非專業的PHP開發者,想要較方便地讀懂並搞清楚一個PHP功能模塊的運行細節,搭建一個PHP調試環境,然後單步調試程序,以掌握程序的整個運行過程顯的尤為重要。
一、 准備安裝文件1、PHPnow-1.5.6。“PHPnow 是 Win32 下綠色免費的 Apache + PHP + MySQL 環境套件包。簡易安裝、快速搭建的 PHP 環境。”
2、ZendDebugger-5.2.14。Zend公司的PHP調試工具或叫插件。 http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.14-cygwin_nt-i386.zip
3、ZendStudioEnterpriseEdition-v5.5.0。據說PHP業界最著名的IDE,不知道基於Eclipse插件的PHP開發環境如何,有時間玩一下再說。
二、 配置程序1、安裝PHPnow。把安裝包PHPnow-1.5.3.zip解壓到一個地方,像我這裡解壓到“D:\soft\PHP”,然後雙擊PHP文件夾中的“Setup.cmd”開始安裝,中間安裝到MySql的時候會提示你輸入數據庫用戶名和密碼,本地測試用一般就都設為“root”。安裝完成後在浏覽器輸入以下地址http://127.0.0.1/,如果成功的話,你將會看到如下畫面:
注意:如果你的系統之前有安裝IIS,並且IIS是運行著的,要先把IIS停止掉,不然80端口會沖突,雖然通過“PnCp.cmd”工具可以修改Apache端口,但不建議這樣改。
2、安裝ZendDebugger。把ZendDebugger-5.2.14-cygwin_nt-i386.zip解壓到PHPnow安裝目錄,即“D:\soft\PHP”,然後把ZendDebugger-5.2.14RC9-cygwin_nt-i386文件夾名字改成ZendDebugger這樣短文件名,進到ZendDebugger目錄,我們可以看到下面那樣的文件結構:
現在要把文件夾中的X_X_x_comp文件夾重命名為php-X.X.x,比如將“5_2_x_comp”重命名為“php-5.2.x”,因為我的測試環境都是php5.2的,所以我可以只改“5_2_x_comp”這一個文件夾。這裡的改動是為了等一下在php.ini中配置它。
現在去PHP安裝目錄修改PHP配置文件,這個文件通常被命名為“php.ini”,讓服務器能正確加載我們的模塊。但是這個PHPnow環境下的PHP配置文件不叫“php.ini”,而是“php-apache2handler.ini”,我們怎麼可以知道當前WEB服務器所用PHP的配置文件名呢。下面就是一個辦法:在“D:\soft\PHP\htdocs”目錄,建立一個phpinfo.php文件,並在其中輸入內容“<?php echo phpinfo(); ?>”,然後打開浏覽器可以看到如下信息,反白顯示路徑就是當前PHP配置文件所在路徑了:
注意:這裡指的PHP配置文件是網站依賴的PHP配置文件,不是下面提到的Zend Studio目錄下的php.ini文件(Zend Studio也自帶了幾個不同版本的PHP),如下圖:
修改“D:\soft\PHP\php-5.2.9-2-Win32\php-apache2handler.ini”文件。用記事本打開該文件,移動側欄滾動條至最底部,在文檔尾部可以發現以下配置節點:
在其尾部追加:
zend_extension_manager.debug_server_ts="D:\soft\PHP\ZendDebugger"
zend_debugger.allow_hosts=127.0.0.1/32,192.168.0.8/24
zend_debugger.expose_remotely=always
最終應該像這樣:
解釋一下:
(1);zend_extension_ts="D:\soft\PHP\ZendDebugger\5_2_x_comp\ZendDebugger.dll"這是我注釋的,因為這樣設置zend_extension_ts重復,出現不能與ZendOptimizer共存情況。
(2)、zend_extension_manager.debug_server_ts="D:\soft\PHP\ZendDebugger",這裡指到目錄就行了,PHP會自動根據自己版本去下面找php_X_X_X這樣文件夾下面的dll文件,這也是上面我們為什麼要對ZendDebugger下面子目錄改名的原因。
(3)、zend_debugger.allow_hosts=127.0.0.1/32,192.168.0.8/24,這裡後面的192.168.0.8改成你自己的IP就行了,可以像下面那樣查看到自己的IP地址:
後面的“32”,“24”不用改,它們不是目錄名,而是子網掩碼類型代號,“32”代表“255.255.255.255”,“24”代表“255.255.255.0”。
在浏覽器打開:http://127.0.0.1/phpinfo.php,如果能看到如下信息則表明安裝成功,注意看最後一行“with Zend Debugger v5.2.14, Copyright (c) 1999-2008, by Zend Technologies”。回到http://127.0.0.1/我們發現組件支持框裡Zend Optimizer支持情況還是“Yes”的,說明我們Zend Debugger與Zend Optimizer是共存運行的(網上提供好些教程是不共存運行的,那樣不夠完美)。
3、安裝Zend Studio。解壓ZendStudioEnterpriseEdition-v5.5.0.270.rar,執行解壓文件後的win_setup.exe文件,默認一路Next下去,這樣就把Zend Studio成功安裝在C盤了。運行它,然後關閉,因為默認是英文的,我們去改成中文。在C盤(即Zend Studio安裝所在盤),搜索文件“desktop_options.xml”,如下圖。
找到後用記事本打開,找到:
<customized_property ID="desktop.language">
<locale language="en" country="" variant=""/>
</customized_property>
把上面的en改成zh並保存,然後把這個文件標記為“只讀”( Zend Studio在特定的時候自動重啟會改回默認設置,設成“只讀”它就無能為力了)。另外像下面的編碼選項也可根據實際情況修改:
<customized_property ID="editing.encoding">
<encoding name="Default"/>
</customized_property>
比如可以改為<encoding name="UTF-8"/>,在用Zend Studio打開代碼文件發現中文亂碼時候可以修改這個選項看看。
三、 開始調試從“開始菜單”找到“Zend Development Environment(Zend Studio)”並運行它。新建一個項目,並在這個項目中引入一個開發好的源碼包,我這裡的源碼包在“D:\soft\PHP\htdocs\cms”,這cms是SupeSite7.0程序,在新建項目的調試選項裡設置成像下圖,其中Debug Server URL也可以是127.0.0.1這樣的地址,只要幾處設置同步就行:
另外“工具”菜單“首選項”的“調試”標簽也設置成如下圖:
現在檢查一下:
成功的話將顯示“已與Debug Server成功連接。”對話框。
打開SupeSite7.0源碼項目,選擇Zend Studio內置浏覽器,並在地址欄裡輸入:http://127.0.0.1/cms/ batch.search.php,這裡我演示SupeSite7.0的搜索頁代碼調試。現在你直接按浏覽器最左邊的“介殼蟲”按鈕(從旁邊倒三角可以選擇不同的調試范圍),直接進入batch.search.php頁面調試(如果batch.search.php頁之前不在編輯狀態,即沒有打開過,直接調試會自動打開,另外如果你用F11逐語句執行的話,當前調試頁包含的外部代碼文件也會被打開。
按調試按鈕後,直接轉到源碼,光標定位在第一個語句了(這裡我沒有設置斷點,並以F5方式調試程序),像下面那樣:
現在我們測試一下點擊一個按鈕提交表單值並捕獲它。像下圖那樣,點“搜索”按鈕後看關鍵字“What is CMS ?”是被如何處理的。你操作順序必須像這樣:打開http://127.0.0.1/cms/batch.search.php—>輸入關鍵字“What is CMS ?”—>點擊“搜索”按鈕—>點擊浏覽器工具欄的“介殼蟲”按鈕。
調試後我們可以看到“What is CMS ?”是用什麼變量存儲並被處理的。如下圖:
至此,整個Zend Studio+PHPnow+Zend Debugger服務器調試環境搭建完畢,並演示了使用方法。