php5.6からphp7.0への移行

こんにちは、ヒラタケです。

php5.6をインストールして使用して動かしていたのですが、7.0のほうが速いし新しいしつよそうということで移行作業を行いました。その関係で、昨日の夕方くらいにサイトにアクセスできない時間がございました。事前の通知無しでの気まぐれな作業を行ったことをお詫び申し上げます。

今後、またphp5.6から7.0への移行作業を行う機会がありそうなので、まだ覚えてるうちになんとなく行った作業を書いておこうと思います。

移行作業は、こちらのサイト様を参考にさせていただきました。こちらが行った手順はだいたい同じですので、私が途中でつまった点を中心に書いていきます。詳しい手順はそちらをご参照ください。

環境

今回移行を行ったサーバの環境は以下のとおりです。

php7.0のインストール

まず、以前インストールしたphp5.6のアンインストールを行いました。インストール済みのパッケージ一覧を表示するとびっくりするくらい大量の文字が出てきましたが、それをコピーして全部まとめて削除しました。絶対使わないのありそう、詳しくないからわかんないけど。

次に、php7.0のインストールを行いました。リポジトリの設定が面倒だったので、以下のコマンドを使用しました。

$ sudo yum --skip-broken --enablerepo=epel,remi,remi-php70 install php-phpseclib php-pecl-jsonc php-xml php-process php-phpunit-PHP-Timer php-pear php-soap php-pdo php-devel php php-gd php-phpunit-exporter php-symfony-class-loader php-common php-cli php-sebastian-recursion-context php-phpunit-Text-Template php-phpunit-File-Iterator php-phpunit-environment php-phpunit-comparator php-mbstring php-phpunit-PHP-Invoker php-sebastian-global-state php-phpspec-prophecy php-phpunit-PHPUnit-MockObject php-phpunit-PHP-TokenStream php-php-gettext php-recode php-symfony-yaml php-pecl-jsonc-devel php-phpunit-Version php-mcrypt php-pecl-xhprof php-opcache php-fpm php-bcmath php-tcpdf-dejavu-sans-fonts php-gmp php-phpunit-PHPUnit php-symfony-common php-pecl-zip php-doctrine-instantiator php-phpunit-diff php-phpdocumentor-reflection-docblock php-tidy php-phpunit-PHP-CodeCoverage php-mysqlnd php-pecl-xdebug php-tcpdf

インストールするものは環境によって異なるかと思います。なんかすごいたくさんあったのですが、削除するときに指定したものを全部コピペしました。ファイルが壊れているとかなんとかでうまく削除できませんでしたので、「-skip-broken」をyumの後ろに付けて実行しました(上記のコマンドには既につけてあります)。

このときに表示された、スキップされたパッケージをメモしておきます。今回うまくインストールができなかったのは「php-pear」というものでした。他のパッケージのインストールが終わった後に以下のコマンドを実行すると普通に出来ました。

$ sudo yum --enablerepo=epel,remi,remi-php70 install php-pear

その後「php-fpm」と「nginx」を起動します。この際、php-fpmの自動起動設定を行いました。

$ sudo systemctl enable php-fpm

ここまでやればphp7.0が動くかと思ったのですが、エラーが出てページが上手く表示されませんでしたのでなんとかしました。

インストール後の設定

まずはphp-fpmの設定を見直します。rpmを実行した際に「www.conf.rpmsave」というファイルが作成されており、以前の設定が残っていたのでそれと見比べながら「www.conf」を書き換えていきます。

$ cd /etc/php-fpm.d/
$ sudo vim www.conf

ユーザが初期状態だと「apache」になっており、使用しているサーバではnginxが動いているのでうまく動かなかったようです。apacheになっていたところをnginxに直すととりあえず表示されるようになりました。

次にphp.iniも同じように修正していきます。ここで注意しなければいけない点は、php7.0になったことで増えている項目があったり、逆に減っている項目があったりすることです。特に、mysqlの項目が消え、mysqliだけになっていたところは見間違えて色々書き換えそうになりましたので注意しましょう。

$ cd /etc
$ sudo cp php.ini php.ini.old
$ sudo vim php.ini

書き換えたらphp-fpmとnginxの再起動をします。

phpMyAdminの設定

php7.0に移行して、Wordpressで作られたこのサイトが表示されることは確認できたのですが、phpMyAdminを開くとエラーが出て使うことができませんでした。折角なので、この機会に最新バージョンをダウンロードして入れなおしをすることにしました。それについても書いていきます。

phpmyadminの設定はこちらのサイト様を参考にさせていただきました。この記事では色々省略して書いていくので、詳しくはそちらをご参照ください。

入れたいディレクトリに移動し、phpmyadmin本体をダウンロードします。ここでは、「/var/www/」に入れることとします。最新バージョンの確認はこちらで行い、ファイル名などを書き換えてコマンドを実行してください。

$ cd /var/www
$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.4/phpMyAdmin-4.6.4-all-languages.tar.gz
$ sudo tar zxvf phpMyAdmin-4.6.4-all-languages.tar.gz
$ sudo rm -f phpMyAdmin-4.6.4-all-languages.tar.gz

以前入れた、古いバージョンのphpmyadminを「phpmyadmin-old」になおして残しておきます。新しい方はディレクトリの名前を「phpmyadmin」に書き換えます。ここの書き換えは、人によって異なると思いますので好きなものを入れてください。また、所有ユーザを「nginx」に書き換えておきます。

$ sudo mv phpmyadmin phpmyadmin-old
$ sudo mv phpMyAdmin-4.6.4-all-languages phpmyadmin
$ sudo chown -R nginx phpmyadmin

その後、ダウンロードしたphpmyadminの中にあるSQLスクリプトを使用して設定を行います。バージョンが新しくなったからなのか、参考にさせていただいたサイトに記載されていたものとスクリプトの場所が変わっていたので、そこを書き換えて実行します。

$ sudo mysql -u root -p
Enter password:

mysql> source /var/www/phpmyadmin/sql/create_tables.sql
mysql> exit

データベースの作成が完了したら、config.inc.phpを作成して編集します。

$ cd phpmyadmin
$ sudo cp config.sample.inc.php config.inc.php
$ sudo chmod 660 config.inc.php
$ sudo vim config.inc.php

このファイルの編集については、参考にさせていただいたこちらのサイトで行っていることとほぼ同じです。「blowfish_secret」のランダムな文字列が32文字以下だと怒られちゃうので、それより多い文字数のものを使用するようにします。

ここまでやってnginxの再起動を行いましたが、うまく動きませんでした。

sessionのところでエラーが出ているようだったので調べていると、php.iniでsessionディレクトリの指定がなくて動かなかったという記事を見つけて確認してみました。sessionディレクトリの指定はされていましたが、よく見てみると指定していたディレクトリの所有グループが「apache」になっていました。

なんで今まで動いていたのかと疑問に思いながらもとりあえずnginxに変更。するとphpmyadminが使えるようになりました。最後に、残しておいた以前のphpmyadminを削除して完了。

いやー、所有ユーザとかパーミッションの設定って大事だね(涙目

参考にさせて頂いたサイト様