Wednesday, November 18, 2015

phpstorm 在 wamp 整合包的 php 除錯

一、前言介紹

php 程式開發,可以在 windows 或是 linux 的環境下進行
本文先介紹是

 windows 環境下的 phpstorm 在 wamp 整合包的 php 除錯

wamp 整合包 就是 windows下將 apache+mysql+php 整合成一個壓縮檔或安裝程式

我最常用的 wamp整合包是 wagon ,內容包含 git,composer,uwamp

而uwamp 又包含了 apache,mysql,php
wagon 是相當完整的 php 程式開發整合包,適合開發一般 php 網頁程式, 在於開發 laravel MVC 也是相當方便

wagon 的介紹及下載,請參考 laravel 道場

二、啟動  apache+mysql
   執行 uwamp 以啟動 apache,mysql,php

 我的 uwamp apache 的 web port 是設定 8001
apache document root 是位在 wagon\uwamp\www
所以開啟網頁是 localhost:8001/some_one.html

三、 顯示 php 環境資訊

程式碼
<?php
phpinfo();
?>

存檔 phpinfo.php
瀏覽器開啟
localhost:8001/phpinfo.php


從圖可看出 目前伺服器 php 版本為 5.6.10 32位元
要進行除錯,必需安裝 xdebug 這一個 php 延伸套件

四、 xdebug 的安裝
開啟 xdebug 下載
配合 php 版本,應下載 PHP 5.6 VC11 TS (32 bit) ,其版本為2.3.2 並存檔至 wagon\uwamp\bin\php\php-5.6.10-Win32-VC11-x86\ext\

開啟 php.ini(如為 wagon ,php 設定檔為 php_uwamp.ini)

在檔案最後加入

[XDebug]
zend_extension = "D:\wagon\uwamp\bin\php\php-5.6.10-Win32-VC11-x86\ext\php_xdebug-2.3.2-5.6-vc11.dll"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_port=9000


zend_extension 所指定的位置如果是放在 php 的 ext 底下,則直接寫成
zend_extension = "php_xdebug-2.3.2-5.6-vc11.dll"

存檔完,記得重新啟 apache

再度瀏覽器開啟
localhost:8001/phpinfo.php
我們按 Ctrl-F 搜尋  xdebug

看到 Zend Engine 就表示環境已支援 xdebug了


五、phpstorm 編輯器的設定
  [File]->[Settings]

[Languangs&Frameworks]->[PHP]->[Servers]->[+]
name 填伺服器名稱,名稱是自訂的,後面除錯時會用到,或是phpstrom 給的 Unnamed
Host 填IP 或 localhost (在本機wagon開發,所以 apache 可以用 localhost)
Port 填 實際 apache 的 web port ,我的電腦是 8001
Debugger 維持原來的 Xdebug



六、設定中斷點

範例程式

<?php
$a=1;
echo $a;
for ($b=1;$b<=10;$b++){
    $c=$b*$b;
    echo $c."<br>";
}
?>
<a href="test1.php">test1</a>

將程式存在 wagon.wuamp/www/test/test.php

在程式碼的行號的右邊,點一下,會出現紅點,表示這是程式的中斷點,若要取消,再點一次
或者多個位置(或不同的網頁的原始檔位置)設定中斷點,中斷點必需是 php 程式而不是 html, 請參考下圖
七、phpstrom  debug 編輯組態
[Run]->[Edit Configurations]


[+]->[PHP Web Application]
Server 選 之前 [File]/[Settings] 所設定的 Server name
Start URL 填網頁的啟始網址,在下一行會出現完整的網址,可以試點看一下網頁是否正常開啟
Browser 選你想要用何種瀏覽器開啟網頁



八、在 phpstorm 中 php 除錯

要對 Php 網頁除錯,可以點工具列上[蟲]的按紐


[Run]->[Debug 'Unnamed'] ,其中的 'Unnamed' 是 本次debug 的名稱,而不是 Server 的名稱



九、在瀏覽器與編輯器之間切換

瀏覽器會開啟網頁執行,一直到遇到中斷點,網頁會暫停

此時的瀏覽器網址列會有  ?XDEBUG_SESSION_START=XXXXXX

但是如果之後有網站內的超連結,此時的 ?XDEBUG_SESSION_START=XXXXXX 會不見,但是網頁仍處於 除錯狀態

以上面的測試網頁 test.php 為例,因為已在第2行設了中斷點,所以程式是停在phpstorm 的 test.php 的第2行

十、 F7(step into) 與 F8(step over)

 step into : 逐行除錯,如遇函數,則進入(into) 函數內逐行除錯
step over: 逐行除錯,如遇函數,將函數視為一行,執行該函數後,停在下一行
不管是 step into 或 step over , phpstorm 都會將目前有執行過的變數值顯示出來,如圖所示

或是將滑鼠指標移停在變數位置,例如停在 $a的位置,也會顯示該變數的值
或是此時按[右鍵]->[Add watches],填入要監看的變數

十一、F9(resume program)

resume program :繼續執行,一直到中斷點,如遇不到中斷點,等同不再除錯
十二、Ctrl-F2(Stop)

  要重新執行程式,需先停止 (Stop) 目前的執行,再重新執行或除錯


No comments: