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

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

CentOS6.7の64bit版にPHP5.4.36を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.4をインストールすることも可能です。

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

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

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

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

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

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

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

httpd-develのインストール

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

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

libcurl-develのインストール

PHP5.4.36の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.4.36の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.4.36のRPMを作成するには、依存関係となるfirebird-develが必要となります。

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

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

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

# yum --enablerepo=epel install firebird-devel

libmcrypt-develのインストール

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

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

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

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

# yum --enablerepo=epel install libmcrypt-devel

PHP5.4.36のインストール

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

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

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

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

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

ApacheのMPMの設定

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

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

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

PHP5.4.36のRPMを作成

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

$ rpmbuild --rebuild --clean php54-5.4.36-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 8755: /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.4.36のSPECファイル「SPECS/php54.spec」が出力されていますので、こちらを以下のように変更します。

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

:(略) # Build Apache module, and the CLI SAPI, /usr/bin/php pushd build-apache build --with-apxs2=%{_sbindir}/apxs  ↓変更 build --with-apxs2=%{_bindir}/apxs 
:(略) # Build a special thread-safe Apache SAPI pushd build-zts build --with-apxs2=%{_sbindir}/apxs  ↓変更 build --with-apxs2=%{_bindir}/apxs 

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

$ rpmbuild -bb --clean php54.spec

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

mysql_config not found configure: error: Please reinstall the mysql distribution

CentOS6.7の標準リポジトリや、IUSのリポジトリからMySQLをインストールした場合、mysql_configは「/usr/lib64/mysql/mysql_config」と「/usr/bin/mysql_config」が存在するのですが、MySQLのyumリポジトリや、MySQLの公式サイトのRPMからインストールした場合では、「/usr/bin/mysql_config」しか存在せず、SPECファイルではlibのほうを参照するようになっているのが原因です。

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

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

# Use the arch-specific mysql_config binary to avoid mismatch with the # arch detection heuristic used by bindir/mysql_config. %global mysql_config %{_libdir}/mysql/mysql_config ↓変更 %global mysql_config %{_bindir}/mysql_config

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

$ rpmbuild -bb --clean php54.spec

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

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

PHP5.4.36のインストール

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

php54をインストールするには、php54-common、php54-cliが必要となるため、一緒にインストールを行います。

# rpm -Uvh php54-5.4.36-1.ius.el6.x86_64.rpm php54-common-5.4.36-1.ius.el6.x86_64.rpm php54-cli-5.4.36-1.ius.el6.x86_64.rpm

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

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

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

# rpm -Uvh php54-mbstring-5.4.36-1.ius.el6.x86_64.rpm

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

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

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

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

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

# rpm -Uvh php54-pdo-5.4.36-1.ius.el6.x86_64.rpm php54-mysqlnd-5.4.36-1.ius.el6.x86_64.rpm

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

また、php54-mysqlndのインストールファイルには「/etc/php.d/mysqlnd.ini」、「/etc/php.d/mysqlnd_mysql.ini」、「/etc/php.d/mysqlnd_mysqli.ini」、「/etc/php.d/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 worker.c>, LoadModule php5_module modules/libphp5-zts.so ↓変更 LoadModule php5_module lib64/httpd/modules/libphp5-zts.so <,/IfModule>,

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

# rpm -ql php54 :(略) /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.4.36のインストールについては、以上です。

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

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