前書き
CentOS 7.x で新たに Laravel の開発環境を作ろうとしていますが、php は今からだとやっぱり 7 系だよねー
ということで、epel+remi リポジトリを入れて、php の 7 系を入れてみました。
remi にした経緯:CentOS 7.x で php-7.x を入れるためのリポジトリの比較
上記のページを見ていただくとわかりますが、パッケージ名としての "php" は、CentOS7 では php-5.4 系を指します。なので、php7 系を入れるためには php70-* というパッケージを導入することになります。
導入したパッケージ
現時点で入れたパッケージは以下の通りです。最終的にはもう少し増えるかもしれません。
vagrant@localhost:~$ rpm -qa | grep php
php70-runtime-1.0-5.el7.remi.x86_64
php70-php-cli-7.0.9-1.el7.remi.x86_64
php70-php-mbstring-7.0.9-1.el7.remi.x86_64
php70-php-json-7.0.9-1.el7.remi.x86_64
php70-php-pdo-7.0.9-1.el7.remi.x86_64
php70-1.0-5.el7.remi.x86_64
php70-php-xml-7.0.9-1.el7.remi.x86_64
php70-php-fpm-7.0.9-1.el7.remi.x86_64
php70-php-common-7.0.9-1.el7.remi.x86_64
php70-php-pgsql-7.0.9-1.el7.remi.x86_64
/etc/php.ini はいずこ?
次に設定をやろうとしたら(正確には、環境を作るための ansible-playbook を作っていますが)、ことごとくパスが異なります。まず、大前提としての /etc/php.ini がない。
vagrant@localhost:~$ sudo ls /etc/php*
ls: cannot access /etc/php*: No such file or directory
php.ini どころか、/etc 直下には php と名の付くものが一切ありません。
思うに、php70-* パッケージシリーズは、php-* パッケージと共存できるように作られているようです。/etc/php* は phpパッケージが使っているであろうから、この名前空間を汚さないようにしているのだと考えられます。
php70 パッケージとは
php70 自体は仮想パッケージのような扱いで、中身(ファイル)がありません。
vagrant@localhost:~$ rpm -ql php70-1.0
(contains no files)
ただ、こいつを入れると、もれなく scl-package が合わせて入ってきます。
vagrant@localhost:~$ rpm -q --provides php70-1.0
scl-package(php70)
php70 = 1.0-5.el7.remi
php70(x86-64) = 1.0-5.el7.remi
SCL は、Software Collections という、複数バージョンを共存させるための仕組みとのことです。PHP 以外にも、同じ仕組みで複数のコンポーネントがサポートされているようです。
Software Collections (SCL) を CentOS に入れてみた
で、結局のところ、/etc/php.ini はいずこ?
ここにありました。
vagrant@localhost:~$ rpm -ql php70-php-common | grep php.ini
/etc/opt/remi/php70/php.ini
/opt/remi/php70/root/usr/share/doc/php70-php-common-7.0.9/php.ini-development
/opt/remi/php70/root/usr/share/doc/php70-php-common-7.0.9/php.ini-production
(別解)
vagrant@localhost:~$ php70 -i | grep php.ini
Configuration File (php.ini) Path => /etc/opt/remi/php70
Loaded Configuration File => /etc/opt/remi/php70/php.ini
remi で入れたものは、/etc/opt/remi/php70/ を /etc と読み替えるとよそさそうです。
vagrant@localhost:~$ ls /etc/opt/remi/php70/
opt php-fpm.conf php.ini pm sysconfig xdg
php.d php-fpm.d pki skel X11 xinetd.d
同様に、以下のような読み替えが必要です:
標準の場所 | remiの場合 |
---|---|
/etc | /etc/opt/remi/php70/ |
/var | /var/opt/remi/php70 |
/usr/share | /opt/remi/php70/root/usr/share/ |
/usr/bin/php | /usr/bin/php70 |
/usr/bin/php70 はさすがに面倒でかつ間違えそうなので、個人的には以下のようなシンボリックリンクを張るようにしました。
vagrant@localhost:~$ ls -l /usr/bin/php
lrwxrwxrwx. 1 root root 21 Aug 25 10:35 /usr/bin/php -> /etc/alternatives/php
vagrant@localhost:~$ ls -l /etc/alternatives/php
lrwxrwxrwx. 1 root root 14 Aug 25 10:35 /etc/alternatives/php -> /usr/bin/php70
vagrant@localhost:~$ php -v
PHP 7.0.9 (cli) (built: Jul 20 2016 16:58:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
現場からは以上です。