kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS6.7 64bitにPHP5.5.20をRPMからインストール

CentOS6.7の64bit版にPHP5.5.20をRPMからインストールする方法を以下に示します。

※CentOS7 64bitをご使用の場合は、当サイトのCentOS7 64bitにPHP5.6をRPMからインストールのページをご覧ください。

当サイトのApache2.4をRPMからインストールする方法でも紹介しているApache2.4をRPMからインストールしている場合、CentOS6.7の標準リポジトリのPHPは、以下のようなApacheのMMN(Module Magic Number)の違いによりインストールできなくなってしまいます。

# yum install php
:(略)
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php.x86_64 0:5.3.3-46.el6_6 will be インストール
--> 依存性の処理をしています: php-common(x86-64) = 5.3.3-46.el6_6 のパッケージ: php-5.3.3-46.el6_6.x86_64
--> 依存性の処理をしています: php-cli(x86-64) = 5.3.3-46.el6_6 のパッケージ: php-5.3.3-46.el6_6.x86_64
--> 依存性の処理をしています: httpd-mmn = 20051115 のパッケージ: php-5.3.3-46.el6_6.x86_64
--> トランザクションの確認を実行しています。
---> Package php.x86_64 0:5.3.3-46.el6_6 will be インストール
--> 依存性の処理をしています: httpd-mmn = 20051115 のパッケージ: php-5.3.3-46.el6_6.x86_64
---> Package php-cli.x86_64 0:5.3.3-46.el6_6 will be インストール
---> Package php-common.x86_64 0:5.3.3-46.el6_6 will be インストール
--> 依存性解決を終了しました。
エラー: パッケージ: php-5.3.3-46.el6_6.x86_64 (updates)
             要求: httpd-mmn = 20051115
            インストール: httpd-2.4.16-1.x86_64 (installed)
                httpd-mmn = 20120211
            利用可能: httpd-2.2.15-45.el6.centos.x86_64 (base)
                httpd-mmn = 20051115
            利用可能: httpd-2.2.15-47.el6.centos.x86_64 (updates)
                httpd-mmn = 20051115
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

また、CentOS6.7の標準リポジトリからインストールできるPHPのバージョンは、5.3.3になっています。

RPMを作成する場合、PHPの公式サイトからソースをダウンロードすることができますが、SPECファイルが付いていないため、このままではrpmbuildコマンドを使用してRPMの作成ができません。

PHPを提供しているリポジトリとして、CentOSのWikiでもIUSRemiが紹介されていますが、これらのPHPも同様のエラーになってしまいます。

※CentOS6.7の標準リポジトリからインストールできるApache2.2.15を使用している場合は、IUSやRemiのリポジトリからPHP5.5をインストールすることも可能です。

※yumリポジトリにIUSとRemiを追加する方法については、当サイトのCentOS6 64bitのyumリポジトリにIUSを追加のページCentOS6 64bitのyumリポジトリにRemiを追加のページをご覧ください。

ここではPHP5.5のRPMは、IUSからダウンロードしたSRPMを元に作成していきます。

※SRPMのダウンロード元としてRemiもありますが、SRPMのアーカイブページがなく、最新のバージョンのみがダウンロード可能となっています。そのためアーカイブページもあり、過去のバージョンもダウンロード可能なIUSのほうを利用するようにしています。

※IUSからダウンロードできるPHP5.5.21から5.5.29のSRPMを確認したところ、httpd-develにバージョン2.4未満のものが依存関係で必要となり、ここで使用しているApache2.4では利用できなかったため、PHPのバージョンは5.5.20を使用しています。

依存関係にあるパッケージで、CentOS6.7の標準リポジトリからインストールできるものについては、特別なものでない限り省略しています。

以下の各コマンドで、プロンプトが「#」で開始しているものはrootユーザーでの実行、「$」で開始しているものは一般ユーザーでの実行となります。

ここでRPMの作成に使用しているrpmbuildコマンドについては、当サイトのCentOS6 64bit rpmbuildコマンドによるRPMの作成のページもご覧ください。

httpd-develのインストール

PHP5.5.20のRPMを作成するには、依存関係となるhttpd-develが必要となります。

Apacheのインストールを、当サイトのCentOS6 64bitにApacheをRPMからインストールのページを参考に行っている場合、同ページを参考にhttpd-develのインストールを行ってください。

libcurl-develのインストール

PHP5.5.20のRPMを作成の際に、依存関係としてcurl-develのバージョン7.9以上が必要と警告メッセージが表示された場合、CentOS6.7の標準リポジトリにはcurl-develというパッケージはありませんが、こちらはlibcurl-develをインストールすればよいです。

これは以下のコマンドで確認できます。

# yum provides curl-devel
:(略)
libcurl-devel-7.19.7-46.el6.x86_64 : Files needed for building applications with libcurl
リポジトリー        : base
一致          :
その他        : curl-devel



libcurl-devel-7.19.7-46.el6.i686 : Files needed for building applications with libcurl
リポジトリー        : base
一致          :
その他        : curl-devel

以下のコマンドを実行して、libcurl-develのインストールを行います。

# yum install libcurl-devel

libjpeg-turbo-develのインストール

PHP5.5.20のRPMを作成の際に、依存関係としてlibjpeg-develが必要と警告メッセージが表示された場合、CentOS6.7の標準リポジトリにはlibjpeg-develというパッケージはありませんが、こちらはlibjpeg-turbo-develをインストールすればよいです。

これは以下のコマンドで確認できます。

# yum provides libjpeg-devel
:(略)
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64 : Headers for the libjpeg-turbo library
リポジトリー        : base
一致          :
その他        : libjpeg-devel



libjpeg-turbo-devel-1.2.1-3.el6_5.i686 : Headers for the libjpeg-turbo library
リポジトリー        : base
一致          :
その他        : libjpeg-devel

以下のコマンドを実行して、libjpeg-turbo-develのインストールを行います。

# yum install libjpeg-turbo-devel

firebird-develのインストール

PHP5.5.20のRPMを作成するには、依存関係となるfirebird-develが必要となります。

CentOS6.7の標準リポジトリにはfirebird-develが存在しないため、ここではEPELのリポジトリからインストールを行います。

以下のコマンドを実行して、firebird-develのインストールを行います。

※EPELのリポジトリの使用方法については、当サイトのCentOS6 64bitのyumリポジトリにEPELを追加のページをご覧ください。

# yum --enablerepo=epel install firebird-devel

libmcrypt-develのインストール

PHP5.5.20のRPMを作成するには、依存関係となるlibmcrypt-develが必要となります。

CentOS6.7の標準リポジトリにはlibmcrypt-develが存在しないため、ここではEPELのリポジトリからインストールを行います。

以下のコマンドを実行して、libmcrypt-develのインストールを行います。

※EPELのリポジトリの使用方法については、当サイトのCentOS6 64bitのyumリポジトリにEPELを追加のページをご覧ください。

# yum --enablerepo=epel install libmcrypt-devel

PHP5.5.20のインストール

IUSからPHP5.5.20のSPRMをダウンロードしてRPMを作成し、インストールを行います。

PHP5.5.20のSRPMをダウンロード

以下のコマンドを実行して、PHP5.5.20のSRPMのダウンロードを行います。

※ダウンロード元のURLは、IUSのサイトから遷移できるCentOS6用のSRPMのアーカイブページにリンクがあります。

$ wget https://dl.iuscommunity.org/pub/ius/archive/CentOS/6/SRPMS/php55u-5.5.20-1.ius.centos6.src.rpm

ApacheのMPMの設定

PHPではApacheのMPMにマルチスレッドで動作するworkerやeventを使用することは推奨されていません。

また、MPMの設定がPHPのRPMを作成する際にも影響してきます。

当サイトのCentOS6 64bitにApacheをRPMからインストールのページを参考に、Apacheで使用するMPMをマルチスレッドでは動作しないpreforkに設定してください。

PHP5.5.20のRPMを作成

以下のコマンドを実行して、PHP5.5.20のRPMの作成を行います。

$ rpmbuild --rebuild --clean php55u-5.5.20-1.ius.centos6.src.rpm

以下のようなエラーになった場合、

Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of /usr/sbin/apxs follows:
./configure: line 8754: /usr/sbin/apxs: No such file or directory
configure: error: Aborting

Apache2.4をRPMからインストールした場合、httpd-develに含まれているapxsのインストール先が「/usr/sbin/apxs」ではなく「/usr/bin/apxs」になっているのが原因です。

rpmbuildコマンド実行時のSPECファイルの出力先に、PHP5.5.20のSPECファイル「SPECS/php55u.spec」が出力されていますので、こちらを以下のように変更します。

apxsのパスを指定しているところを1箇所変更します。

:(略)
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}}
↓変更
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_bindir}/apxs}}

以下のコマンドを実行して、変更したSPECファイルからRPMの作成を行います。

$ rpmbuild -bb --clean php55u.spec

以下のRPMが作成されます。

  • php55u-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-cli-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-fpm-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-common-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-devel-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-opcache-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-imap-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-ldap-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-pgsql-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-process-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-odbc-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-soap-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-interbase-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-snmp-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-xml-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-xmlrpc-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-gd-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-bcmath-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-gmp-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-dba-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-litespeed-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-mcrypt-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-tidy-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-embedded-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-pspell-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-recode-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-intl-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-enchant-5.5.20-1.ius.el6.x86_64.rpm
  • php55u-debuginfo-5.5.20-1.ius.el6.x86_64.rpm

PHPのパッケージ同士の依存関係について

php55uをインストールするには、php55u-cli、php55u-commonが依存関係として必要となるのですが、php55u-commonをインストールするには、php55u-pecl-jsoncが依存関係として必要となり、こちらはphp55uのSRPMからは作成されません。

また、php55u-pecl-jsoncのRPMをSRPMから作成するには、php55u-devel、php55u-pearが依存関係として必要となるのですが、php55u-pearもphp55uのSRPMからは作成されません。

そして、php55u-pearのRPMをSRPMから作成するには、php55u-cli、php55u-xmlが依存関係として必要となり、php55u-cli、php55u-xmlをインストールするには、php55u-commonが依存関係として必要となります。

依存関係の状態が、php55u-common → php55u-pecl-jsonc → php55u-pear → php55u-cli → php55u-commonと一周回る形になってしまっていますので、必要なものは依存関係を無視してインストールするようにします。

以下のコマンドを実行して、php55u-cli、php55u-xml、php55u-common、php55u-process、php55u-develのインストールを行います。

※php55u-cli、php55u-xmlは、php55u-pearのRPMをSRPMから作成する際に、依存関係として必要となります。

※php55u-common、php55u-processは、php55u-pearのインストール時に、依存関係として必要となります。

※php55u-pearのインストール時に依存関係として必要と警告メッセージが表示されるパッケージのうち、php55u-bz2、php55u-ftp、php55u-pcre、php55u-tokenizer、php55u-zlibは、php55u-commonをインストールすればよく、php55u-posixは、php55u-processをインストールすればよいです。これはIUSをyumリポジトリに追加した状態で、コマンドを「yum --enablerepo=ius,epel provides php55u-bz2」のように実行することで確認できます。

※php55u-develは、php55u-pecl-jsoncのRPMをSRPMから作成する際に、依存関係として必要となります。

※php55u-develをインストールする際に依存関係として必要となるphp55u-pecl-jsonc-develは、この後の手順でphp55u-pecl-jsoncのRPMを作成する際に一緒に作成されます。

# rpm -Uvh --nodeps php55u-cli-5.5.20-1.ius.el6.x86_64.rpm php55u-xml-5.5.20-1.ius.el6.x86_64.rpm php55u-common-5.5.20-1.ius.el6.x86_64.rpm php55u-process-5.5.20-1.ius.el6.x86_64.rpm php55u-devel-5.5.20-1.ius.el6.x86_64.rpm

php55u-pearのSRPMをダウンロード

以下のコマンドを実行して、php55u-pearのSRPMのダウンロードを行います。

※ダウンロード元のURLは、IUSのサイトから遷移できるCentOS6用のSRPMのphp55u-pearのページにリンクがあります。

(新しいバージョンがリリースされてリンク切れになっている場合は、アーカイブページにダウンロードのリンクがあると思いますので、こちらを参照してみてください。)

$ wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pear-1.9.5-2.ius.centos6.src.rpm

php55u-pearのRPMを作成

以下のコマンドを実行して、php55u-pearのRPMの作成を行います。

$ rpmbuild --rebuild --clean php55u-pear-1.9.5-2.ius.centos6.src.rpm

以下のRPMが作成されます。

  • php55u-pear-1.9.5-2.ius.el6.noarch.rpm

※RPMの出力先は「RPMS/x86_64/」ではなく、「RPMS/noarch/」になっていますので、ご注意ください。

php55u-pearのインストール

以下のコマンドを実行して、php55u-pearのインストールを行います。

# rpm -Uvh php55u-pear-1.9.5-2.ius.el6.noarch.rpm

php55u-pecl-jsoncのSRPMをダウンロード

以下のコマンドを実行して、php55u-pecl-jsoncのSRPMのダウンロードを行います。

※ダウンロード元のURLは、IUSのサイトから遷移できるCentOS6用のSRPMのphp55u-pecl-jsoncのページにリンクがあります。

(新しいバージョンがリリースされてリンク切れになっている場合は、アーカイブページにダウンロードのリンクがあると思いますので、こちらを参照してみてください。)

$ wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pecl-jsonc-1.3.7-1.ius.centos6.src.rpm

php55u-pecl-jsoncのRPMを作成

以下のコマンドを実行して、php55u-pecl-jsoncのRPMの作成を行います。

$ rpmbuild --rebuild --clean php55u-pecl-jsonc-1.3.7-1.ius.centos6.src.rpm

以下のRPMが作成されます。

  • php55u-pecl-jsonc-1.3.7-1.ius.el6.x86_64.rpm
  • php55u-pecl-jsonc-devel-1.3.7-1.ius.el6.x86_64.rpm
  • php55u-pecl-jsonc-debuginfo-1.3.7-1.ius.el6.x86_64.rpm

php55u-pecl-jsoncのインストール

以下のコマンドを実行して、php55u-pecl-jsonc、php55u-pecl-jsonc-develのインストールを行います。

# rpm -Uvh php55u-pecl-jsonc-1.3.7-1.ius.el6.x86_64.rpm php55u-pecl-jsonc-devel-1.3.7-1.ius.el6.x86_64.rpm

PHP5.5.20のインストール

以下のコマンドを実行して、PHP5.5.20のインストールを行います。

# rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm

【補足】マルチバイト文字列関数を使用する場合

マルチバイト文字列関数(mb_〜)を使用するには、mbstringモジュールが別途必要となります。

以下のコマンドを実行して、mbstringモジュールのインストールを行います。

# rpm -Uvh php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm

尚、mbstring.soファイルの読み込み設定は、php55u-mbstringのインストールファイルに含まれている「/etc/php.d/20-mbstring.ini」で、自動的に行われるようになっています。

※マルチバイト文字列関数を使用する際は、php.iniで「mbstring.internal_encoding」を設定する必要があります。PHP5.6では、この設定は非推奨(不要)になっています。

【補足】PDOでMySQLに接続する場合

PDOでMySQLに接続するには、pdoモジュール、mysqlndモジュールが別途必要となります。

以下のコマンドを実行して、pdoモジュール、mysqlndモジュールのインストールを行います。

# rpm -Uvh php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm

尚、pdo.soファイルの読み込み設定は、php55u-pdoのインストールファイルに含まれている「/etc/php.d/20-pdo.ini」で、自動的に行われるようになっています。

また、php55u-mysqlndのインストールファイルには「/etc/php.d/20-mysqlnd.ini」、「/etc/php.d/20-mysqlnd_mysql.ini」、「/etc/php.d/20-mysqlnd_mysqli.ini」、「/etc/php.d/30-pdo_mysqlnd.ini」が含まれており、それぞれmysqlnd.so、mysqlnd_mysql.so、mysqlnd_mysqli.so、pdo_mysqlnd.soが読み込まれるようになっています。

インストール後の設定

Apacheの設定ファイルの編集

PHPが利用できるようにするには、Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」で、PHPの設定ファイル「/etc/httpd/conf.d/php.conf」の読み込みを行う必要があります。

「php.conf」の読み込みには、以下の記述を追記します。

Include /etc/httpd/conf.d/php.conf

他のパッケージで使用しているconfファイルがある場合も一緒に読み込めるようにするには、以下の記述を追記します。

Include /etc/httpd/conf.d/*.conf

PHPの設定ファイルの編集

PHPの設定ファイル「/etc/httpd/conf.d/php.conf」で、モジュールを読み込むパスが実際のものと異なっていますので、以下のように編集します。

<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
  ↓変更
  LoadModule php5_module lib64/httpd/modules/libphp5.so
</IfModule>
<IfModule !prefork.c>
  LoadModule php5_module modules/libphp5-zts.so
  ↓変更
  LoadModule php5_module lib64/httpd/modules/libphp5-zts.so
</IfModule>

尚、これらのモジュールはphp55uに含まれており、モジュールのパスは以下のコマンドで確認することができます。

# rpm -ql php55u
:(略)
/usr/lib64/httpd/modules/libphp5-zts.so
/usr/lib64/httpd/modules/libphp5.so
:(略)

httpd.confで、「ServerRoot "/usr"」と設定されているため、php.confでは「/usr」以下でのパス指定が行えるようになっています。

Apacheから外部のデータベースへのアクセスを許可

PHPから外部のMySQLへ接続を行う際に、以下のようなエラーになってしまう場合、

(PHPからローカルのMySQLへの接続、mysqlコマンドを使用しての外部のMySQLへの接続は可能。)

SQLSTATE[HY000] [2002] Permission denied

SELinuxによるアクセス制御が有効になっていることが原因の可能性があります。

SELinuxによるApacheから外部のデータベースへのアクセス許可の設定については、当サイトのCentOS6 64bit SELinuxによるアクセス制御のページをご覧ください。

PHP5.5.20のインストールについては、以上です。

PHPに関するおすすめの書籍

当サイトの書籍紹介ページで、PHPに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。