2017年10月20日金曜日

PHPのインストール

最初にすること

とりあえず現時点でインストール可能なPHPのパッケージのバージョンを確認します。
$ sudo yum list php*

まあおそらくはクッソ古いPHPしかないと思います。以下のコマンドでepelとIUSのリポジトリを利用可能にし、最新のPHPをインストールできるようにします。
CentOS7
$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm

CentOS6以前
$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
$ sudo yum install https://centos6.iuscommunity.org/ius-release.rpm

最新版(執筆時点ではphp7.2)が利用可能になりました。とりあえずインストールします。
$ sudo yum -y install php72u php72u-mysqlnd php72u-gd php72u-mbstring php72u-opcache php72u-xml php72u-pecl-xdebug php72u-pdo php72u-devel php72u-json

phpのインストールが終わったらアパッチの再起動をします。
(CentOS7)
$ sudo systemctl restart httpd
(CentOS6以前)
$ sudo service httpd restart

するとphp7.2があなたのサーバーの動いている状態になります。 これを確かめるために適当なテキストファイルを共有フォルダの中に作成し、これをinfo.phpという名前に変えます。拡張子も変えてください。変わらない場合はWindows側で拡張子を表示させる設定を先にしてください。


そしたらinfo.phpの中にこう書きます。そして保存して終了します。
<?php
phpinfo();
?>

こんな感じ。

そしたら仮想サーバーにブラウザからアクセスします。vagrantを使っていてprivate networkの設定になっている場合はhttp://192.168.33.10/info.phpにアクセスすればいいはずです。
以下のように表示されれば成功です。phpは正常に動いています。



ついでにxdebugの設定もしておきましょう。
phpの設定ファイルを開きます。
$ sudo vi /etc/php.ini

その設定ファイルに以下をコピペします。青い部分と赤い部分は環境によって違う可能性があるのでよく確認してからにしてください。
[XDebug]
zend_extension=/usr/lib64/php/modules/xdebug.so
html_errors=on
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host="192.168.33.10"
xdebug.remote_port=9000
xdebug.remote_mode=req
xdebug.idekey="netbeans-xdebug"
xdebug.remote_connect_back = On
vi (あるいはvim) の操作法
「a」を押すと編集モードになります。エスケープキー(esc)を押すと編集モードを終了、コマンドモードに戻ります。「?aaa」と入力すると「aaa」という文字列でそのファイルの中を検索し、最初のヒット内容に移動します。「#」をクリックで次のヒット内容に移動します。
何もせずにファイルを閉じるにはコマンドモードで「:q!」を入力します。編集内容を保存してファイルを閉じるには「:wq」を入力します。

赤いxdebug.remote_host="192.168.33.10"があなたの仮想マシンのIPアドレスです。つまりゲストのほうのIPです。Vagrantfileに書かれているIPを書いてください。
青いzend_extension=/usr/lib64/php/modules/xdebug.soにはxdebug.soの場所を書きます。
まずlocateを使えるようにします。CentOS6以前は多分デフォルトで入ってます。
$ sudo install mlocate
$ sudo updatedb
そしてxdebug.soの場所を調べます。
$ sudo locate xdebug.so
もし場所が違うようなら正しく修正してください。

できたらアパッチの再起動をします。
$ sudo systemctl restart httpd

XdebugとNetbeansの設定


さっき作ったinfo.phpを見ると現在なんのパッケージが入っているのか、どういう設定なのかがわかります(ただし見れるのは当然PHP関連のみ)。


これを見るために・・・・

これを作りましたね。


info.phpが動いているのを確認したらIDEであるNetbeansをインストールしましょう。
https://netbeans.org/features/php/

私はNetbeans version 8.2をインストールしました。

インストールが終わったらNetbeansを「管理者として起動」で起動します。
そしたら
File --> New Project
をクリックします。


PHP --> PHP Application with existing sources を選びNextをクリック。

そしたらこんな画面になります。「Browse」からプロジェクトフォルダを選びます。今回は共有フォルダであるMyCentOsフォルダを指定します。つぎにPHPのバージョンを選びます。今回は「7.2」が選択肢になかったので「7.0」にしました。デフォルトエンコーディングには「UTF-8」を選びます。できたらNextをクリック。

「Project URL」にはあなたのプロジェクトのURLを書きます。つまり、さっきのvagrantの仮想サーバーのアドレスhttp://192.168.33.10/ですね。Index Fileにはプロジェクトのindexファイルのパスを書きます。今回はinfo.phpなのでinfo.phpのパスを書きます。そしたら「Finnish」を押します。


そしたら違う画面になるので、プロジェクト名の上で右クリックします。
するとメニューが出るので「Properties」を押します。



そしたら左のメニューから「Run Configuration」を選択し、右のメニューから「Advanced」をクリックします。


するとこのような画面になるので「Sever Path」をダブルクリックします。さらに仮想サーバー内のプロジェクトパスを書きます。今回は共有フォルダ直下に入れているだけなので/vagrantです。「Project Path」にはホスト側のプロジェクトパスを書きます。「...」をクリックしてプロジェクトパスを指定しましょう。今回は共有フォルダ直下に入れているだけなので「C:\MyVM\MyCentOs」です。

全部できたら「OK」を押しましょう。


するとxdebugが動くはずです。行番号をクリックするとブレイクポイント(処理が一時停止する場所)を追加できます。ブレイクポイントを作ったら上のメニューからデバック用の処理開始ボタンを押します。



すると処理がブレイクポイントの場所で止まるはずです。止まったら、その時点の変数の中身などいろいろな情報がわかります。開発には欠かせないものです。このようなプログラムの実行をステップ実行といいます。F7を押すと次の行にうつります。
もし色々すべてうまく行ったなら、右下に「netbeans-xdebug: running」が表示されるはずです。されていない場合は何かがうまく行っていないです。



補足


ファイルの1行目で処理を停止したい場合、 「Stop at First line」にチェックを入れます。





するとファイルの1行目で処理が止まるようになります。慣れてくるとファイルが変わるたびに処理が止まるのがうざく感じるので私はオフにしてます。

もしxdebugがちゃんと動かないなら仮想サーバーのエラーログを確認します。
# less /var/log/httpd/error_log

現在の通信状況を確認する場合はこのコマンドです。
# netstat -an

xdebugはポート80番で動きます。なのでxdebugがちゃんと動いている場合、こんなふうな通信があるはずです。
tcp6       0      0 192.168.33.10:80       192.168.33.2:49901      ESTABLISHED

Netbeansのポートは9000番です。
tcp        0      0 192.168.33.10:52024    192.168.33.2:9000       ESTABLISHED

Netbeansのポート番号は以下から変更可能です。

stackoverflowより引用の図。
Citation from stackoverflow (an answer from Linus Kleen) https://stackoverflow.com/questions/8049776/xdebug-for-remote-server-not-connecting

もし通信がなぜか失敗しているならウイルスソフトかファイアウォールがxdebugとNetbeansの通信をブロックしている可能性が高いです。その場合はファイアウォールやウイルスソフトのブロック履歴を確認してください。

CakePHP3

CakePHP3を使っている場合はRun Configurationを以下のように変えます。「cake」はcakephpアプリの名前ですがもし違う名前を使っているならうまく調整してください。とにかくwebroot内をproject urlとして設定できればOKです。


リンク:
1. vagrantとvirtual box
2. アパッチのインストール
3. MySQLのインストール
4. PHPのインストール
5. CakePHP3のインストール
6. MigrationとBake