さて、ようやくApacheを入れ終わったので、PHPのインストールを行います。

これまでの記事


こうして今までの記事を並べてみると、サーバーのインストールだけでも
結構な記事になりますね。


まずはインストールしてみる


いつものようにrootになってダウンロードして解凍、
とりあえずインストールを実行してみます。


# wget http://jp1.php.net/get/php-5.4.10.tar.gz/from/this/mirror
# tar xvzf php-5.4.10.tar.gz
# cd php-5.4.10
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbregex --enable-mbstring


オプションはとりあえず最低限で。

The output of /usr/local/apache2/bin/apxs follows:
./configure: /usr/local/apache2/bin/apxs: /replace/with/path/to/perl/interpreter: bad interpreter: No such file or directory


perlが入っていないとapxsが実行できないようです。

perlのインストール


もともとはperlerですが、
多分、perlでいろいろやることはないだろうと、
めんどいのでyumでインストール

# yum install perl


Is this ok [y/N]:

と聞かれるので例によってy

Complete!


と表示されて無事インストールできました。

apxsのperlのパスを変更


さて、apacheは再インストールしないとダメなのでしょうか?

The output of /usr/local/apache2/bin/apxs follows:
./configure: /usr/local/apache2/bin/apxs: /replace/with/path/to/perl/interpreter: bad interpreter: No such file or directory


やはりダメなようです。
/usr/local/apache2/bin/apxs
を見てみると、1行目に
#!/replace/with/path/to/perl/interpreter -w

と書いてあります。

これを
#!/usr/bin/perl -w

に置き換えます。

libxml2のインストール


もう一度、PHPのインストールを実行すると、
checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
# yum install libxml2-devel


Is this ok [y/N]:

と聞かれるので例によってy

Complete!


と表示されて無事インストールできました。

PHPのmake testでエラーに遭遇


今度こそ・・・

Thank you for using PHP.


無事先に進めました。
さくっと
# make
# make test
# make install


ここでエラーに出くわします。

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #32001 (xml_parse*() goes into infinite loop when autodetection in effect), using UTF-* [ext/xml/tests/bug32001.phpt]
XMLReader: libxml2 XML Reader, DTD [ext/xmlreader/tests/008.phpt]
XMLReader: accessing empty and non existing attributes [ext/xmlreader/tests/012.phpt]
=====================================================================


libxml2のバージョンを確認


# yum list installed|grep libxml2
libxml2.x86_64 2.7.6-8.el6_3.4 @updates
libxml2-devel.x86_64 2.7.6-8.el6_3.4 @updates


2.7.6-8ですね。
libxml2のページによると2.9.0が最新なようです。

http://xmlsoft.org/

libxml2のソースコードからのインストール


# wget ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz
# tar xvzf libxml2-2.9.0.tar.gz
# cd libxml2-2.9.0
# ./configure --prefix=/usr/local
# make


defined but not usedのwarningがたくさん出ますがまあ良しとしましょう。

# make test
# make install


無事インストールできました。

# yum remove libxml2-devel


もう一度PHPのコンパイルを実行


# make clean
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbregex --enable-mbstring
# make
# make test

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
XMLReader: libxml2 XML Reader, DTD [ext/xmlreader/tests/008.phpt]
XMLReader: accessing empty and non existing attributes [ext/xmlreader/tests/012.phpt]
=====================================================================


エラーログを見てみたところ、Warningが出ていることがテスト失敗の原因のようです。
とりあえず実害はないので、このままインストールします。

# make install


いくつかのサイトで調べましたが、エラーが出ているにも関わらず、
何も調べないでそのままインストールを実行している方が多々いました。
後で問題になるかもしれないのに信じられない・・・。

今回はボクしか触らないサーバー。
インストールも自分で行ったので、後々XMLのパース関係でエラーが出れば
これが原因かもしれないとわかります。
個人的にmake testは重要だと思います。


さて、次はApacheの設定です。

Apacheの設定


# cd /usr/local/apache2/conf
# vi httpd.conf


.phpの設定が追加されているのでコメントアウトを外します。

# 400 AddType application/x-httpd-php .php


400 AddType application/x-httpd-php .php

に変更します。

終わったらApacheを再起動します。


# /usr/local/apache2/bin/apachectl restart


php.iniの設置


php.iniファイルをコピーします。
設置場所はphp_info()で確認できます。
デフォルトでは
/usr/local/lib/php.ini
に設定されるようです。

$もと東大生もと社長の自由奔放ブログ Just do it now!-php.iniの設置場所を確認
▲php_info()でphp.iniの記載場所を確認

# cp /usr/local/src/php-5.4.10/php.ini-production /usr/local/lib/php.ini


php.iniにセキュリティ上の設定を加える


さて、PHPもまた、デフォルトで実行しているPHPのバージョンを出力します。
早速ヘッダーを見てみましょう。

HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 12:15:33 GMT
Server: Apache
X-Powered-By: PHP/5.4.10
Connection: close
Content-Type: text/html


ここですね。
前回、Apacheの設定の際に説明したように、実行環境の詳細情報は伝えるべきではありません。
早速出ないように修正します。

インストールしたApache2.4.3にセキュリティー上の設定を加える

# vi /usr/local/lib/php.ini

366 ;;;;;;;;;;;;;;;;;
367 ; Miscellaneous ;
368 ;;;;;;;;;;;;;;;;;
369
370 ; Decides whether PHP may expose the fact that it is installed on the se rver
371 ; (e.g. by adding its signature to the Web server header). It is no sec urity
372 ; threat in any way, but it makes it possible to determine whether you u se PHP
373 ; on your server or not.
374 ; http://php.net/expose-php
375 expose_php = On


最期の行を

375 expose_php = Off

に変更します。

終わったらApacheを再起動します。

# /usr/local/apache2/bin/apachectl restart


確認すると、

HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 12:29:36 GMT
Server: Apache
Connection: close
Content-Type: text/html


無事表示されなくなりました。

関連記事