Edited at

CentOS6.9 + Apache2.4 + PHP7.1 の環境構築

More than 1 year has passed since last update.


問題

CentOS7はデフォルトApache2.4なのですんなりいくのだが、CentOS6はそうも行かない。


bash

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum install -y --enablerepo=remi,remi-php71 php

とすると

================================================================================

Package Arch Version Repository Size
================================================================================
Installing:
php x86_64 7.1.17-1.el6.remi remi-php71 2.8 M
Installing for dependencies:
httpd x86_64 2.2.15-60.el6.centos.6 updates 836 k
httpd-tools x86_64 2.2.15-60.el6.centos.6 updates 80 k

apache2.2が依存関係でインストールされる。

2.2はEOLでupdateしなきゃならないので邪魔なんだけど。。。


解決方法


bash

# php7.1をインストール。7.2にするなら全部読み替えること。

yum install -y --enablerepo=remi,remi-php71 \
php \
php-devel

# 依存関係で入ったapache2.2を削除
rpm -e --nodeps httpd
rpm -e --nodeps httpd-tools
rm -fr /etc/httpd
rm -fr /etc/init.d/httpd

# apache2.4をインストール
wget https://repos.fedorapeople.org/repos/jkaluza/httpd24/epel-httpd24.repo
mv epel-httpd24.repo /etc/yum.repos.d/
yum -y install --enablerepo=epel-httpd24 httpd24-httpd httpd24-httpd-devel httpd24-mod_proxy_html httpd24-mod_session httpd24-mod_ssl

# httpd24関連はパスが長いので2.2に合わせてリンクも作っている
ln -s /opt/rh/httpd24/root/etc/httpd /etc/httpd
ln -s /etc/init.d/httpd24-httpd /etc/init.d/httpd
chkconfig httpd on

# PHP7.1をコンパイルしてapache2.4 向けのPHPライブラリ(libphp7.so)を作成する
yum -y install \
bison \
libxml2-devel

# .configureの失敗回避
ln -s /opt/rh/httpd24/root/usr/lib64/pkgconfig/apr-1.pc /usr/lib64/pkgconfig/apr-1.pc

# PHP7.1のコンパイルする。副産物(libphp7.so)が目的なので出来上がるphpは使わない
wget https://github.com/php/php-src/archive/php-7.1.17.tar.gz
tar xvf php-7.1.17.tar.gz
cd php-src-php-7.1.17
./buildconf --force
./configure \
--with-config-file-path=/etc/ \
--with-config-file-scan-dir=/etc/php.d \
--with-apxs2=/opt/rh/httpd24/root/usr/bin/apxs
make

cp /home/vagrant/php-src-php-7.1.17/libs/libphp7.so /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so

# ライブラリを読み込ませる設定を追記
echo "LoadModule php7_module /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so" >> /etc/httpd/conf/httpd.conf

service httpd start


makeしたPHP7.1をmake installしないのは、yum installで各種PHPライブラリを取得するとPHP Warning: Module 'apc' already loaded in Unknown on lineという警告が大量に出たから。

phpの./configureで上のようにほぼ何もつけなくてもjson等のライブラリをyumが取ってきてしまうので、/etc/php.d/xxxx.confが勝手に作られて多重ロードの警告を出してしまう。

まあ多重ロードの定義を消せばいいのだが、以降も追加でPHPライブラリが欲しくなる可能性があるので、導入が簡単なyumを使えるようにmakeしたphpを使わない方式にした。