泊學實操視頻
泊學原文連接
PHP7, Xdebug and Homesteadphp
在經歷了13個RC版本以後,PHP 7終於來了。在咱們上手評估PHP 7的新特性以前,咱們要先創建一個獨立的開發環境。nginx
安裝Homestead vagrant boxlaravel
Homestead是一個由Laravel官方維護的Vagrant "box"。它基於Ubuntu 14.04,把一個LNMP環境、PHP開發經常使用的軟件包和PHP模塊「打包」在了一塊兒,是咱們部署PHP開發環境最「爽」的方式之一。做爲在PHP社區最受歡迎的Framework之一,Laravel固然不會錯過PHP 7版本的Homestead。接下來,咱們就基於Homestead,構建一個單獨用於測試PHP 7的Vagrant box。git
開始前,你須要在你的操做系統安裝兩個軟件:github
Virtualbox: 咱們的開發環境將會部署和運行在一個Virutalbox虛擬機裏;
Vagrant: 用來管理和啓動Homestead的工具;
若是你對它們還並不熟悉也不要緊,先下載並安裝上它們就行了。安裝以後,咱們須要把Homestead box下載到本地。打開系統的Terminal,運行下面的命令:chrome
vagrant box add laravel/homestead-7
以後選1,再以後,就是安靜的等待homestead下載完成了。完成以後,咱們使用:docker
vagrant box list
來查看安裝在本地的vagrant box。瀏覽器
若是能夠看到紅框裏的部分,就表示已經下載成功了。bash
執行下面的命令,clone homestead部署項目到本地:服務器
git clone -b php-7 https://github.com/laravel/homestead.git Homestead7
以後,進入Homestead7目錄,執行初始化腳本:
cd Homestead7 bash init.sh
完成後,在~/.homestead目錄下,就會有一個Homestead.yaml的文件。從此,咱們全部的LNMP項目配置,都統一在這個文件中進行。
在啓動homestead以前,咱們要先進行一些設置。首先,咱們新建一個目錄php7,用來存放咱們編寫的PHP 7腳本。
mkdir php7
接下來,咱們打開~/.homestead/Homestead.yaml,把剛纔新建的代碼目錄,「添加」到homestead,變成一個站點。
在Homestead.yaml裏,咱們須要修改上圖中紅框標記的兩個地方:
folders:把Host上的源代碼目錄同步到virtualbox虛擬機裏面的目錄;
sites: map指定站點的servername;to指定HTTP root;
至於其餘部分,咱們暫時就不須要修改了,保存文件後,退出編輯器。
一切都配置完了,咱們在以前的新建的php7目錄添加一個測試腳本demo.php:
<?php phpinfo();
以後,進入Homestead7目錄,執行vagrant up命令,啓動homestead-7 box!
成功啓動以後,咱們以前添加的demo.php就會被自動同步到咱們在folders中配置的目錄,而且homestead會自動添加咱們在sites中定義站點的nginx配置文件。
接下來,咱們在/etc/hosts中添加一條解析記錄:
192.168.10.10 php7.app
打開瀏覽器,訪問http://php7.app/demo.php,若是你能夠看到標誌性的php info頁面,恭喜你,homestead已經正常工做了。
編譯安裝Xdebug
成功部署PHP 7後,接下來咱們要解決代碼調試的問題,對於稍微複雜一些的項目,使用var_dump()打印變量調試很是不方便,而且不利於咱們動態理解PHP代碼的執行過程。而這,就是Xdebug要解決的問題。
在經歷了很長一段時間後,Xdebug從2.4.0版本開始,支持調試PHP 7代碼,接下來,咱們採用源碼編譯的方式進行安裝。
首先,咱們在Homestead7目錄,執行vagrant ssh登陸到Homestead虛擬機;
其次,下載並解壓Xdebug源代碼:
wget http://xdebug.org/files/xdebug-2.4.0rc1.tgz tar xvzf xdebug-2.4.0rc1.tgz
接下來,進入解壓縮的目錄,使用phpize7.0生成配置文件、configure、make、make install:
cd xdebug-2.4.0RC1 phpize7.0 configure --enable-xdebug make sudo make install
成功編譯安裝後,Xdebug會顯示編譯完成的.so文件目錄,咱們要記錄下這個目錄,讓當前的PHP環境支持Xdebug調試。
首先,咱們爲Xdebug建立一個配置文件,xdebug.ini,這裏,注意把zend_extension的目錄替換成本身的.so目錄:
zend_extension="/usr/lib/php/20151012/xdebug.so" xdebug.remote_enable = 1 xdebug.remote_connect_back = 1 xdebug.remote_port = 9000 xdebug.max_nesting_level = 500
以後,咱們把xdebug.ini複製到/etc/php/mods-available目錄。
接下來,在當前PHP 7 CLI和FPM的conf.d目錄建立對應的符號連接:
sudo ln -snf /etc/php/mods-available/xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini sudo ln -snf /etc/php/mods-available/xdebug.ini /etc/php/7.0/fpm/conf.d/20-xdebug.ini
最後,咱們重啓php7.0-fpm,讓新的配置生效:
service php7.0-fpm restart
咱們有不少方式來確認Xdebug已經正常工做了:
在Terminal執行php -m,在輸出結果最後的[Zend Modules]部分,能夠看到有Xdebug;
執行php -i |grep xdebug,在輸出的結果中,能夠看到有xdebug support => enabled;
訪問咱們以前的http://php7.app/demo.php,在Zend Engine圖片的旁邊,能夠找到Xdebug標誌;
設置好PHP 7和Xdebug後,咱們須要一個IDE來配置和使用它們。這裏,咱們使用PHPStorm,你們能夠免費下載官方提供的EAP版本。
安裝好以後,咱們使用PHPStorm打開以前建立的php7目錄,咱們須要爲咱們的項目配置一下服務器環境。點擊「Run / Edit configurations...」。在彈出的對話框裏,點擊左上角的+,選擇PHP Web Application。
在右側界面中,設置好Name以後,點擊紅色箭頭位置的按鈕來設置遠程服務器:
這裏的遠程服務器就是指Homestead啓動的Virtualbox,點擊左上角的+,以後,填入相應的信息(必定要設置好path mapping):
最後,基於咱們填寫的Server Host,在Start Url填寫咱們要訪問的文件。這裏咱們寫以前建立的demo.php,PHPStorm會自動爲咱們生成默認的訪問連接。
一切都設置好,點擊OK按鈕。接下來爲了測試調試功能,咱們修改一下以前的demo.php:
<?php $foo = 10; $bar = 20; $compare = $foo <=> $bar; echo $compare;
以後,點擊$foo左側的區域,設置一個斷點。
點擊菜單"Run / Debug 'php7demo...'",
若是一切順利,PHPStorm會啓動Chrome,而且自動停在demo.php設置斷點的地方。
這樣,你就能夠點擊紅色箭頭位置的按鈕,單步調試本身的PHP 7代碼了。
雖然部署看一個可調式的PHP 7環境並不難,可是按照上面一步步走來總也要費很多功夫,在理解了具體咱們都須要作哪些工做以後,咱們給你們提供一個更簡單的部署PHP 7開發環境的辦法。
泊學給你們提供了一個LNMP的Docker image,和Homestead同樣,咱們打包了一個最新的LNMP環境、一個可調試的PHP 7版本以及兼容Laravel經常使用的PHP modules。
*這僅僅是一個便於構建開發環境的方法,咱們沒有采用Docker倡導的單容器單進程的方式,不要在生產環境使用這個container。針對Docker部署問題,咱們會基於Laravel單獨提供一個Docker自動化部署的視頻系列。
-特別注意*
打開終端,執行下面的命令:
docker pull boxueio/php7-with-xdebug
等Docker下載完,咱們執行(把[your source dir]替換成你本身的PHP源代碼目錄):
docker run -d --name php7 -p 8088:80 -p 33060:3306 -v [your source dir]:/var/www/php7.app php7-with-xdebug
以後,Docker會返回一個container ID,咱們使用docker ps命令,就能夠查看正在運行的容器了。接下來,只要在/etc/hosts中添加一個php7.app的解析記錄,咱們就能夠經過http://php7.app:8088,訪問PHP 7的開發環境了。