上手並過渡到PHP7(1)——基於Homestead的PHP7和XDdebug環境

PHP7 up and running

泊學實操視頻
泊學原文連接
PHP7, Xdebug and Homesteadphp

在經歷了13個RC版本以後,PHP 7終於來了。在咱們上手評估PHP 7的新特性以前,咱們要先創建一個獨立的開發環境。nginx

Homestead - A full-feature PHP 7 box

安裝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

bo-reading-vagrant-box-add@2x.jpg
以後選1,再以後,就是安靜的等待homestead下載完成了。完成以後,咱們使用:docker

vagrant box list

來查看安裝在本地的vagrant box。
bo-reading-vagrant-box-list@2x.jpg瀏覽器

若是能夠看到紅框裏的部分,就表示已經下載成功了。bash

安裝Homestead部署腳本

執行下面的命令,clone homestead部署項目到本地:服務器

git clone -b php-7 https://github.com/laravel/homestead.git Homestead7

以後,進入Homestead7目錄,執行初始化腳本:

cd Homestead7
bash init.sh

完成後,在~/.homestead目錄下,就會有一個Homestead.yaml的文件。從此,咱們全部的LNMP項目配置,都統一在這個文件中進行。
bo-reading-homestead-yaml@2x.jpg

LNMP項目設置

在啓動homestead以前,咱們要先進行一些設置。首先,咱們新建一個目錄php7,用來存放咱們編寫的PHP 7腳本。

mkdir php7

接下來,咱們打開~/.homestead/Homestead.yaml,把剛纔新建的代碼目錄,「添加」到homestead,變成一個站點。
bo-reading-homestead-yaml-config@2x.jpg

在Homestead.yaml裏,咱們須要修改上圖中紅框標記的兩個地方:

folders:把Host上的源代碼目錄同步到virtualbox虛擬機裏面的目錄;
sites: map指定站點的servername;to指定HTTP root;
至於其餘部分,咱們暫時就不須要修改了,保存文件後,退出編輯器。

Vagrant up

一切都配置完了,咱們在以前的新建的php7目錄添加一個測試腳本demo.php:

<?php phpinfo();

以後,進入Homestead7目錄,執行vagrant up命令,啓動homestead-7 box!
bo-reading-vagrant-box-up@2x.jpg

成功啓動以後,咱們以前添加的demo.php就會被自動同步到咱們在folders中配置的目錄,而且homestead會自動添加咱們在sites中定義站點的nginx配置文件。

接下來,咱們在/etc/hosts中添加一條解析記錄:

192.168.10.10 php7.app

打開瀏覽器,訪問http://php7.app/demo.php,若是你能夠看到標誌性的php info頁面,恭喜你,homestead已經正常工做了。
bo-reading-phpinfo-on-chrome@2x.jpg

Xdebug - Debug PHP code step by step

編譯安裝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調試。
bo-reading-xdebug-make-install@2x.jpg

啓用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標誌;
bo-reading-xdebug-enabled@2x.jpg

PHPStorm

設置好PHP 7和Xdebug後,咱們須要一個IDE來配置和使用它們。這裏,咱們使用PHPStorm,你們能夠免費下載官方提供的EAP版本。

安裝好以後,咱們使用PHPStorm打開以前建立的php7目錄,咱們須要爲咱們的項目配置一下服務器環境。點擊「Run / Edit configurations...」。在彈出的對話框裏,點擊左上角的+,選擇PHP Web Application。
bo-reading-run-edit-configuration@2x.jpg

在右側界面中,設置好Name以後,點擊紅色箭頭位置的按鈕來設置遠程服務器:
bo-reading-add-remote-server@2x.jpg

這裏的遠程服務器就是指Homestead啓動的Virtualbox,點擊左上角的+,以後,填入相應的信息(必定要設置好path mapping):
bo-reading-remote-server-info@2x.jpg

最後,基於咱們填寫的Server Host,在Start Url填寫咱們要訪問的文件。這裏咱們寫以前建立的demo.php,PHPStorm會自動爲咱們生成默認的訪問連接。

一切都設置好,點擊OK按鈕。接下來爲了測試調試功能,咱們修改一下以前的demo.php:

<?php
$foo = 10;
$bar = 20;
$compare = $foo <=> $bar;

echo $compare;

以後,點擊$foo左側的區域,設置一個斷點。
bo-reading-breakpoint1@2x.jpg

點擊菜單"Run / Debug 'php7demo...'",
bo-reading-run-debug@2x.jpg

若是一切順利,PHPStorm會啓動Chrome,而且自動停在demo.php設置斷點的地方。
bo-reading-breaked@2x.jpg

這樣,你就能夠點擊紅色箭頭位置的按鈕,單步調試本身的PHP 7代碼了。

Package all of them into a container

雖然部署看一個可調式的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的開發環境了。

相關文章
相關標籤/搜索