Tuesday, November 24, 2015

phpstorm 在 vagrant 底下 ubuntu php 程式 除錯

前一篇是 phpstorm 在 wamp 整合包的 php 除錯

本文則介紹在vagrant 環境  linux 系統下對 php 的程式進行除錯
一、ubuntu 環境的建立,如已有 ubuntu 14.04 請略過本段

首先使用 vagrant 來建立一個虛擬的 ubuntu 14.04 的環境

mkdir lamp
cd lamp
vagrant box add ubuntu/trusty64
vagrant init

修改 Vagrant 設定檔
vim Vagrantfile
 找到  config.vm.box = "base" ,改成
 
config.vm.box = "ubuntu/trusty64"

 找到  #  config.vm.network "private_network", ip: "192.168.33.10"

將最前面的 # (註解) 拿掉

找到 # config.vm.synced_folder "../data", "/vagrant_data",改成
  config.vm.synced_folder "www", "/var/www/html"

存檔
新增 資料夾 www
mkdir www
這資料夾將對應到 vagrant 虛擬機器 的 網頁根目錄 (document root ) /var/www/html
所以要先產生,以免後面要啟動 vagrant 虛擬機器時,產生錯誤而無法開啟

二、安裝 apache2 和 php5
啟動 vagrant 虛擬機器
vagrant up
啟動過程會產生很多訊息

登入啟動後的 虛擬機器

vagrant ssh
安裝 apache2 和 php5

sudo apt-get update
sudo apt-get install apache2 php5

安裝 xdebug 擴充套件
sudo apt-get install php5-xdebug
修改 設定檔,使 xdebug 能使用
sudo vim /etc/php5/mods-available/xdebug.ini
 (注意:這是ubuntu xdebug 的設定,如果是其他的分支版本,可能是sudo vim  /etc/php5/apache2/php.ini)
zend_extension=xdebug.so
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "192.168.33.1"
xdebug.remote_port=9000
xdebug.remote_mode = req
xdebug.remote_log = "/var/log/xdebug.log"
xdebug.remote_enable = 1
請特別要注意其中的 xdebug.remote_host = "192.168.33.1" ,是要設在 phpstorm 所在的電腦的 ip
建議你用你電腦實際的 ip 值,因為我是用 vagrant 建構 ubuntu 環境,vagrant 會使用 virtaulbox 來產生虛擬機器,ip 也是由虛擬網卡由 Vagrantfile 設定檔所設定
如果設定值和本文相同,那麼本機也會由 virtualbox 建了一個虛擬網卡,其 ip 為 192.168.33.1

你也可以用

ipconfig
來查目前電腦的 ip


ping 192.168.33.1

來查 此ip 是否有回應

修改完存檔
記得要重啟 apache
 
sudo service apache2 restart
接著 按
ctrl-D

離開 ubuntu










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) 目前的執行,再重新執行或除錯