Help us understand the problem. What is going on with this article?

CentOS 6 の環境にPHP7をインストールしてApacheで動かすまで

More than 3 years have passed since last update.

目的

  • CentOS 6 の環境に、今話題のPHP7をインストールする
  • Webアクセスをしてからphpinfo()の画面を確認する。
  • 自身の備忘録のため

参考

前提

  • CentOS 6
  • PHPはまだ何もインストールされていない状態

準備

PHP7はまだリリースはされていないので、ソースからのビルドとなります
PHPの開発リポジトリからソースを取得し、必要なモジュールをそろえます

ビルド用のライブラリを揃える

yumで可能なものはyumで一気に

bash
$ yum -y install gcc gcc-c++ git wget tar m4 autoconf httpd vim
$ yum -y install httpd-devel gd-devel libxml2-devel mysql-devel t1lib-devel
$ yum -y install bzip2-devel curl-devel gmp-devel aspell-devel recode-devel 

libmcryptのインストール(epelリポジトリにある)

bash
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ rpm -ivh epel-release-6-8.noarch.rpm 
$ yum -y install libmcrypt-devel

bison-2.7 のインストール

bash
$ wget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
$ tar zxvf bison-2.7.tar.gz
$ cd bison-2.7
$ ./configure
$ make
$ make install

re2c のインストール

bash
$ wget http://downloads.sourceforge.net/project/re2c/re2c/0.14.3/re2c-0.14.3.tar.gz
$ tar zxvf re2c-0.14.3.tar.gz
$ cd re2c-0.14.3
$ ./configure
$ make
$ make install

PHP7 のビルド

ソースをチェックアウトして準備

bash
$ git clone https://git.php.net/repository/php-src.git
$ cd php-src
$ ./buildconf

ビルド

ビルドは公式のWikiを参考に行いました。
必要に応じて削ったり増やしたりしてください。
./configure --help でオプション閲覧可能
今回は、ホームディレクトリにtmpというディレクトリを作って
そこにインストールしています。

以下の説明もそれを前提に記述しているので、
インストールパスを変えたい人は適宜読み替えてください

bash
# 上記の ./buildconf の続きから
$ ./configure \
    --prefix=$HOME/tmp/usr \
    --with-config-file-path=$HOME/tmp/usr/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config \
    --with-apxs2=/usr/sbin/apxs # これがないとApacheから使えないので注意

※最後の --with-apxs2オプションを指定しないと、
Apache用のモジュール「libphp7.so」を生成してくれません

configureに成功すると、画面に

Thank you for using PHP.

と表示されます。
エラーやWarningが出た場合は必要なモジュールが足りてない場合があるので、
それを追加でインストールします。

「あれ?入れたはずなのに?」と思った場合は、
そのモジュールの名前に「-devel」をつけて yum install してみましょう。
例えば、「curl」をインストールしたのにエラーになったら、
「curl-devel」をインストールしてみる、といった具合に。

configureが終わったら、makeします

bash
$ make
$ make test # testは長いけど、やった方がいい
$ make install

php.iniの設定

上記の通りビルドを行うと、
カレントディレクトリに「tmp」という名のディレクトリができています。
(rootだと/root/tmp)

その中の入り、「~/tmp/usr/etc」の場所にphp.iniを作成します

bash
$ vim ~/tmp/usr/etc/php.ini

中身はお好みで設定

php.ini
max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0

zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

PHP7の実行

PHP7 の旨が表示されればビルド成功です

bash
$ ~/tmp/usr/bin/php -v
PHP 7.0.0-dev (cli) (built: Jun  4 2015 05:59:18) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

Apacheの設定

設定ファイルの記述

make install が完了すると、
/usr/lib64/httpd/modules/libphp7.so が作成されているはずなので確認します。

ない場合は、locatefindなどのコマンドを使って探しましょう。
それでも見つからない場合は、ビルド時のオプションが間違っている可能性があります。
もう一度、見直してみましょう。

あるのが確認できたら、Apache用の設定ファイルを作成します。

bash
$ vim /etc/httpd/conf.d/php7.conf

下記の内容を記述
make installをした時点で/etc/httpd/conf/httpd.conf
LoadModuleの記述が自動でされている場合もあるので注意します
(ファイルを分けるのが嫌なら/etc/httpd/conf/httpd.confに全て記述してもOKです)

php7.conf
# ApacheにPHP7のモジュールを読み込ませる記述
LoadModule php7_module   /usr/lib64/httpd/modules/libphp7.so

# .phpファイルにアクセスした場合PHPスクリプトとして扱う記述
AddType application/x-httpd-php .php

# デフォルトファイルの追加
DirectoryIndex index.php

Apacheを起動(再起動)させる

bash
$ /etc/init.d/httpd start # 再起動の場合は restart

PHPの表示を確認

phpinfoを表示するファイルを作成します

bash
$ echo "<?php phpinfo();" > /var/www/html/info.php

Webブラウザから、DocumentRootのアドレスにアクセスして表示を確認!!

phpinfo.png

7.0.0の画面が!やったね!!

余談

dockerがインストールされている環境の場合、
php7用のコンテナを立ち上げて、適当にhttpをポートマッピングをする設定にして起動。

その後、上記のインストール手順を行うことで
80番ポートの通常アクセスはホスト側のPHPの環境(PHP5.5等)、
50080番ポートはコンテナ側のPHP7の環境、
といった具合に使い分けることができます。

bash
$ docker run -t -i --name php7-test -p 50080:80 centos:centos6 /bin/bash
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away