いい加減 php のバージョンを 5 から 7 へ変えようということでさくっとアップデートした。
サーバはさくらの VPS 上にインストールした Ubuntu 14.04 だ。/etc/os-release は以下のようになっている。
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
httpd には apache2 を使用している。
- php7 へのアップグレード方法
- 必要なパッケージのインストール
- PHP Fatal error: Uncaught Error: Call to undefined function mb_convert_encoding()
- PHP Fatal error: Uncaught Error: Class 'DOMDocument' not found
- PHP Fatal error: Uncaught Error: Call to undefined function imagecreate()
- PHP Fatal error: Uncaught Error: Call to undefined function json_encode()
- PHP Fatal error: Uncaught Error: Call to undefined function curl_init()
php7 へのアップグレード方法
DigitalOcean のアップグレード記事を参考にした。
https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04最初にリポジトリを追加する。
$ sudo add-apt-repository ppa:ondrej/php
sudo: add-apt-repository: command not found
add-apt-repository というコマンドが無いと言われたので先に software-properties-common を入れる。
$ sudo apt-get install software-properties-common
http://askubuntu.com/questions/593433/error-sudo-add-apt-repository-command-not-found
これで先程のコマンドが動く。
$ sudo add-apt-repository ppa:ondrej/php
(ry)
OK
$ sudo apt-get update
$ sudo apt-get install php7.0
$ sudo apt-get install php7.0-mysql
ここまでやれば php7 のインストールはできたので php コマンドを打てば php7 が使える。
$ php -v
PHP 7.0.13-1+deb.sury.org~trusty+1 (cli) ( NTS )
ところがこの状態で apache2 を再起動しても反映されず、php5 を使い続ける。PHP7 を使うには php5 の設定を削除し、PHP7 を読み込むようにする必要がある。
これは単純に apache のモジュールの有効/無効を切り替えるだけで良い。
$ sudo a2dismod php5
$ sudo a2enmod php7.0
a2enmod 及び a2dismod コマンドを使用すると簡単に Apache モジュールの有効/無効を切り替える事ができるので便利だ。
$ sudo service apache2 restart
この状態で phpinfo などを表示すれば php 7 と表示されるはずだ。
必要なパッケージのインストール
ただこれだけだと使用しているスクリプトによってはエラーが出るだろう。Apache のエラーログを見ながら足りないものを追加していく。
PHP Fatal error: Uncaught Error: Call to undefined function mb_convert_encoding()
マルチバイト系の関数が動いて無さそうなので php7.0-mbstring を入れる。
$ sudo apt-get install php7.0-mbstring
PHP Fatal error: Uncaught Error: Class 'DOMDocument' not found
XML がうまくパースできていなさそうだったので php7.0-xml も入れた。
$ sudo apt-get install php7.0-xml
PHP Fatal error: Uncaught Error: Call to undefined function imagecreate()
GD が入ってないとこんな感じのエラーメッセージが出る。php7.0-gd も入れよう。
$ sudo apt-get install php7.0-gd
PHP Fatal error: Uncaught Error: Call to undefined function json_encode()
json も入れてやる。
$ sudo apt-get install php7.0-json
PHP Fatal error: Uncaught Error: Call to undefined function curl_init()
curl も無いと言われた。
$ sudo apt-get install php7.0-curl