[!NOTE]
この記事は 2013/07/31 に momoto.github.io へ投稿した内容を Qiita へ移行してきたものです
PHP 5.5.1 をソースコードからビルドして、Unix系システムへインストールする手順の記録です。 この記事では CentOS 6.4 環境でインストールの例を示しますが、自身でソースからビルドする方法は特定の Linux ディストリビューションに依りません。
インストールを行うユーザは、インストール先ディレクトリに対して書込み権限をもっている必要があります。 /usr/local/*
にインストールする場合、通常、root 権限が必要です。
1. ソースコードを取得する
ソースコードをインストールするマシンに用意します。 インターネットからダウンロードする場合、php.net にソースコードの URL が示されています。 bzip2、gzip、xzのアーカイブが用意されていますので、マシンで解凍・展開できる形式を選択してください。
ダウンロードには cURL や GNU Wget などのダウンロードマネージャやウェブブラウザを使用します。 次の例では、cURL をつかって php-5.5.1.tar.gz をダウンロードします。
[root@localhost ~]# curl -Lso php-5.5.1.tar.gz http://jp2.php.net/get/php-5.5.1.tar.gz/from/jp1.php.net/mirror
取得したアーカイブファイルは適宜、解凍・展開して、ワーキングディレクトリを移動させます。 FHS に準拠するシステムであれば、独自にインストールするソフトウェアのためのディレクトリ /usr/local
が予め用意されていますので、この記事ではソースコードを /usr/local/src
に配置してインストールをすすめます。
[root@localhost ~]# tar xfz php-5.5.1.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/php-5.5.1
[root@localhost php-5.5.1]#
2. インストール要件を満たす
マシンがインストールの要件を満たしている必要があります。 また、必要な拡張モジュールがある場合は、そのモジュールの要件も満たす必要があります。
[root@localhost ~]# yum install gcc
[root@localhost ~]# yum install make
3. ビルドファイルを作成する
configure
をつかってビルドファイルを作成します。 configure
にオプションを与えることで、インストール先のディレクトリや有効にするモジュールを調整できます。 指定できるオプションについては configure --help
や Manual を参照してください。 ビルドの要件を満たしていない場合、configure
の処理は中断されます。
例えば、インストール先のディレクトリを /usr/local/php-5.5.1
として、 Apacheモジュール, MySQLiモジュール, PDO MySQLモジュール, OpenSSLモジュール を有効にする場合は次のように configure
を実行します。
[root@localhost php-5.5.1]# ./configure \
--prefix=/usr/local/php-5.5.1 \
--with-apxs2=/usr/local/httpd-2.4.6/bin/apxs \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl
次に、configureのエラー例をいくつか示します。
xml2-config not found.
checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
libxmlモジュール (デフォルトで有効)の要件である libxml が必要です。
[root@localhost php-5.5.1]# yum install libxml2-devel
configure: error: Cannot find OpenSSL’s
configure: error: Cannot find OpenSSL's <evp.h>
OpenSSLモジュール の要件である OpenSSL が必要です。
[root@localhost php-5.5.1]# yum search install openssl-devel
configure
の処理が終了して Makefile
が作成されていれば、ビルドの段階へすすみます。
4. ビルドとインストール
ビルドとインストールには make
を使います。ディスクの容量が充分足りていることを確認してください。
[root@localhost php-5.5.1]# make && make install
make
の処理が無事に終了したらインストールは完了です。 configure --prefix
に指定した位置にファイルが展開されているはずです。
[root@localhost php-5.5.1]# /usr/local/php-5.5.1/bin/php -v
PHP 5.5.1 (cli)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
インストール後
必要に応じて、php.ini の設定、実行バイナリへのパスの設定を行なってください。 ソースコードのアーカイブには標準の php.ini が、開発環境向けと運用環境向けの2通り用意されています。
[root@localhost php-5.5.1]# cp /usr/local/src/php-5.5.1/php.ini-development /usr/local/php-5.5.1/lib/php.ini
新しく設置した php.ini が正常に認識されているかどうかは --ini
オプションで出力される Loaded Configuration File などで確認できます。
[root@localhost php-5.5.1]# ./bin/php --ini
Configuration File (php.ini) Path: /usr/local/php-5.5.1/lib
Loaded Configuration File: /usr/local/php-5.5.1/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
標準のままの状態ではタイムゾーン未設定の警告がでますが、date.timezone
ディレクティブにタイムゾーンを設定するとこの警告は出なくなります。その他のディレクティブも用途にあわせて設定してください。
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo
動作を確認する
最後に、PHP 5.5.1 の動作を少し確認してみます。 ここでは PHP の拡張モジュールが正常に機能しているかどうかを中心に確かめていきます。
apache2.x
Apache の設定ファイル(httpd.confなど)に LoadModule
ディレクティブを正しく記述していることを確認します。
LoadModule php5_module modules/libphp5.so
また、PHP ファイルを Apache ハンドラに指定するため、SetHandler や AddHandler などのディレクティブも必要です。
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
libphp5.so は、configure --with-apxs2=FILE
オプションを指定していれば、PHP のインストール時に作成されているはずです。
[root@localhost httpd-2.4.6]# file modules/libphp5.so
modules/libphp5.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
apachectl -M
オプションをつかって、読み込まれているモジュールを確認することもできます。
[root@localhost httpd-2.4.6]# apachectl -M | grep php5_module
php5_module (shared)
MySQLiモジュール
mysqli モジュールを確認します。 PHP Warning: PHP Startup: Unable to load dynamic library 'php_mysqli.dll'
と警告が出る場合はモジュールがうまく読み込まれていません。
[root@localhost php-5.5.1]# php -m | grep mysqli
mysqli
[root@localhost php-5.5.1]# php -r "var_dump(class_exists('mysqli'));"
bool(true)
PDO MySQLモジュール
pdo_mysql モジュールを確認します。 PHP Warning: PHP Startup: Unable to load dynamic library 'php_pdo_mysql.dll'
と警告が出る場合はモジュールがうまく読み込まれていません。
[root@localhost php-5.5.1]# php -m | grep -i pdo
PDO
pdo_mysql
pdo_sqlite
[root@localhost php-5.5.1]# php -r 'print_r(PDO::getAvailableDrivers());'
Array
(
[0] => mysql
[1] => sqlite
)