2016.01.21

【サーバー】PHP7へアップデート

PHP7へのアップデートは注意したほうがいい。

機能がやたらと少ない

サーバーでちょっとしたアプリのテストをしてみようとしたのだが
一部の関数で定義なしで実行ができなかった。
なのでそろそろPHPをアップデードしないと行けない気がしてきた。

現状のPHP5.3.4からPHP7.0.2への大幅なアップデートをしてみたいと思います。

ソースからコンパイル

まず重要なconfigureに対するオプションですが
phpがconfigureのオプションを保存してくれているみたいなので
それをまるまるコピーしてベースとする。

そこから、オプションが使えないものをチェックして整頓していく。
そしたらいろいろと使えないものが出てくるわけです。
"enable-magic-quotes"と"enable-zend-multibyte"は削除されたみたい。
"with-mysql"は存在自体がなくなっている。

とりあえず、なくなったものをすべて削除した上でコンパイルしてインストールする。
この先問題がいろいろとありますがPHPの作り方はこれでいいみたいです。

Apacheのhttpd.confの対応

インストールが終わってApacheを再起動して確認だと思うわけですが
なかなかそうもさせてくれないわけです。
素直にApacheを再起動すると起動出来ないはずです。

ちゃんとconfigureを設定するとhttpd.confの中に自動的にPHP7が有効にする
処理を自動で追加してくれるわけです。
以前からあるPHP5の設定と、今回追加したPHP7の設定が共存するhttpd.confが誕生して
PHP5側の設定で落ちる。

なのでPHP5のLoadModuleを削除してPHP7のLoadModuleがされていることを確認して再起動をする。
そうするとApacheが起動してくれる感じになるかと思います。

PHP7の変更点にやられる

ここまで来るとphpinfo()は実行出来ていると思います。

ではWordpressが動くかというとそうは簡単には行かせてくれない。

環境にもよるけどプラグインがPHP7に対応していないパターンがいくつもある。

大抵はPHP7から非推奨から削除になったものを使っているパターンが多い。
Link:PHP: mysql_real_escape_string - Manual
Link:PHP: split - Manual
削除なので完全にエラーになるのでソースを修正しないといけない。

それ以外にも関数の挙動が変わるものもある。
Link:PHP: preg_replace - Manual

クラス定義の方法も以前までは許されていたものが例外として
処理されるようになるので動かないソースになってしまう。
Link:PHP: PHP 7.0.x で推奨されなくなる機能 - Manual

そういうものをすべて調整してどうにか見た目的には問題なく動いて見れる形まで
持ってくることができました。

xdebugのインストール

xdebugはインストールしておきたいのだが、pecl経由でインストールしようとすると
configureは問題なさそうなのだがコンパイルでエラーになる。
エラーらしきものが出ていないので手詰まり。

よく調べてみるとxdebugはphp7にまだ対応していないとのこと。
Link:0001147: Unable to compile for php7-dev - MantisBT

ということはまだ正式リリース前の最新版であればインストールできるんじゃねということで
公式ページよりpeclに上がっていない 2.4.0RC3 を引っ張ってきてソースからコンパイル。
Link:Xdebug - Debugger and Profiler Tool for PHP
問題なくコンパイルできある程度動いているみたいなので現状はこのままおいておくことにする。

とりあえず、インストールログをおいておく。

$ phpize
$ ./configure --enable-xdebug
$ make
# make install

大変そうに書いてはいるけどWordpressのプラグインの不具合を除けば
素直なインストールな流れにだったかと思います。

そんな感じでPHP7からは大幅変更があるので
あっさりとアップデートをするのは要注意だと思います。

Pocket

ニャッキ格闘列伝 > サーバー >

前の記事:
次の記事:

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>