「Apache2.4.3+PHP5.4.7」セットアップ手順

WordPressを使うために、自分のPC(Windows7)上に「Apache + PHP」の環境をつくろうとしたんだけど、最新のApacheをダウンロードしようとしたら、Windows向けのインストーラがなかった。

http://httpd.apache.org/

ということで少し悩まされたので、手順をメモ。


(1)PHPインストール
PHPのホームページ(http://www.php.net/)で、Downloadを選択しWindows版を選択すると、Non Thread Safe 版とThread Safe版の2種類ある。
Apache1.xxを使う場合、Apache側がthreadに対応していないため、PHPのほうはNon Thread Safe を使うらしい。
今回は、Apache2.xxを使う予定なので、Thread Safe版を使えばよい。

zipファイルをダウンロードした後、ファイルを適当な場所に展開します。
ただし、インストール先のディレクトリ名に空白が入っていると良くないので、C:\Program Files とかは避けたほうがよい。

次に、コマンドプロンプトを開き、

 cd [PHPインストール先]
 php -v

と実行すると、PHPバージョンが返ってくるはず。

 PHP 5.4.7 (cli) (built: Sep 12 2012 23:48:31)
 Copyright (c) 1997-2012 The PHP Group
 Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

これでインストールは、完了になる。
あとはWindowsの環境変数PATHに、php.exeへのパスを追加します。

ここで注意したい点としては、「ユーザの環境変数ではなくシステム環境変数のほうに設定しておく」ということ。

なぜかというと、あとでApacheインストールした後、サービスにApacheを登録し、サービスとしてApacheを起動します。(そのときにApacheは、SYSTEMユーザで起動されます。)
その状態で、PHPとの連携確認(phpinfoを見てみる)のはうまくいくんですけど、そのあとWordPressをインストールしようとしてエラーが出てしまうんです。たぶん、PHP-MySQLの連携がうまくいってない。


(2)Apacheインストール
Apache LoungeというサイトにWindows版のApacheがあります。
http://www.apachelounge.com/

Apacheバイナリ(zipファイル)と、PHPモジュールをダウンロードします。
httpd-2.4.3-win32.zip
php5apache2_4.dll-php-5.4-win32.zip

今回はPHP5.4.7を使うので、php5.4XX向けのモジュールを使います。
mod_securityを使いたい人は、それもダウンロード。

Apacheバイナリ(zipファイル)を、インストールしたい場所に展開すればインストールは完了。ただし、そのままだと起動しないので、初期設定が必要です。(あと、サービスへの登録も)

まず、[Apacheインストール先]/confディレクトリにある、httpd.confを修正します。
なぜかというと、Apacheインストール先を、c:/Apache24 にした想定で設定がされているため、インストール先ディレクトリ名を修正しないとApacheが起動しません。

c:/Apache24と記述されている部分を、自分がインストールした場所に書き換えます。修正個所は6か所

 Line 37: ServerRoot "[Apacheインストール先]"
 Line 237: DocumentRoot "[Apacheインストール先]/htdocs"
 Line 238: <Directory "[Apacheインストール先]/htdocs">
 Line 354:     ScriptAlias /cgi-bin/ "[Apacheインストール先]/cgi-bin/"
 Line 370: <Directory "[Apacheインストール先]/cgi-bin">

動作に直接影響ないけど、「設定されてないよ!」っていうエラーメッセージが毎回出るので、以下も設定しておきます。(初期設定では、コメントになっています)

ServerName localhost:80

次にApacheをサービスに登録します。

コマンドプロンプトを管理者として起動します。(コマンドプロンプトのアイコンを右クリックし、「管理者として実行」を選択。)
Apacheの便ディレクトリに移動し、「httpd -k install」を実行します

 cd [Apacheインストール先\bin]
 httpd -k install

登録されるとsuccessメッセージが返ってきます

 Installing the Apache2.4 service
 The Apache2.4 service is successfully installed.

httpd.confにエラーがあると、怒られます

 Testing httpd.conf....
 Errors reported here must be corrected before the service can be started.
 httpd: Syntax error on line 37 of [Apacheインストール先]/conf/httpd.conf: ServerRoot must be a valid directory

これでサービスから、Apache起動・停止ができるようになります
初期設定だと、スタートアップの種類が、自動起動になっているので、手動起動に設定変更しておきます。

補足情報:
Apacheをサービスから登録解除するときは、「httpd -k uninstall」コマンドを使う。
Apacheをコマンドで起動・停止するときは、「httpd -k start」「httpd -k stop」を使う。リスタートは「httpd -k restart」

参考サイト:《解説》Windowsサーバ用ApacheLounge版のApache2.4シリーズのインストール方法。


(3)PHP設定(WordPress向け)
php.iniを設定します。WordPressを使うことを想定しているので、文字コードはUTF8にします。

PHPインストール先に、php.ini-production というファイルがあるので、これをコピーしてphp.ini として保存。
そして以下のパラメータを設定。

 default_charset = "UTF-8"
 extension_dir = "ext"
 extension=php_mbstring.dll
 date.timezone ="Asia/Tokyo"
 mbstring.language = Japanese
 mbstring.internal_encoding = UTF-8
 mbstring.http_input = auto
 mbstring.http_output = UTF-8
 mbstring.encoding_translation = On
 mbstring.detect_order = auto
 mbstring.substitute_character = none;
 mbstring.func_overload = 0
 mbstring.strict_detection = Off

参考サイト:WindowsでPHPを使う方法、知ってる?~2.4.Windows用PHP5の設定~


(4)Apache設定(PHPとの連携)
まず、PHPとの連携のための設定をApacheのhttpd.conf内に追記します。
LoadModule ~~という設定の最後に、以下を追加します。

PHPIniDir "[PHPインストール先]"
LoadModule php5_module "[PHPインストール先]/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

あと、DirectoryIndex に、index.phpを追加します。

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

次にPHPモジュールをPHPインストール先に配置します。
Apacheと一緒にダウンロードしたphp5apache2_4.dll-php-5.4-win32.zip の中に、PHP5.4.7向けのphp5apache2_4.dll が入っています。これを、PHPインストール先に配置します。

これでPHPとの連携ができるはずなので、動作確認します。
Apacheのhtdocsフォルダ内に、適当なファイル名のphpファイル(test.php)を置いて、なかにこれを書きます。

<?php
  phpinfo();
?>

ブラウザから、http://localhost/test.php とアクセスすると、phpinfoの画面が見えるはず。

-----------
12/17追記
httpd.confの修正をした後は、Apache再起動が必要です。


(5)Apache設定(WordPress用の追加設定)
WordPressを使う場合は、PHP-MySQLの連携が必要です。

まず、php.ini 設定修正し、MySQLモジュールを読込む設定をします。

extension=php_mysql.dll

ブラウザからphpinfoを見ると、モジュールが表示されていると思います。(Apache再起動必要だったかも)

次に、必要に応じて行う設定になります。
WordPressでパーマリンクを使う場合、Apacheでmod_rewriteモジュールが使えるように設定されている必要があります。あと、ファイルの書き換え権限を設定しておく必要があります。

Apacheのhttpd.conf に、LoadModule 設定追加します。

LoadModule rewrite_module modules/mod_rewrite.so

また、httpd.confの中の、htdocs配下の権限設定(AllowOverrideの設定)を修正し、権限追加します

<Directory "[Apacheインストール先]/htdocs">
         :       :
    Options Indexes FollowSymLinks
         :       :
    AllowOverride FileInfo Options
         :       :
</Directory>

次もまた、必要に応じて行う設定です。
WordPressを実際に動かしていると、なぜか特定の操作の時だけ文字化ける場合があります。僕の場合、「メニューの作成」をしているときに、保存するとメニューの名前が文字化けました。(固定ページの作成では文字化けないのに!)
このような時は、Apacheの.htacces に以下の設定を追加すると、(僕の場合は)解決しました。

WordPressをインストールしたディレクトリ内(index.phpと同じところ)に、.htaccesを配置して、以下を追記します。WordPressでパーマリンクを使っている場合はすでに.htaccesが存在すると思います。

<IfModule mod_php5.c>
php_flag  output_buffering              Off
php_value output_handler                none
php_value default_charset               UTF-8
php_value mbstring.language             Japanese
php_flag  mbstring.encoding_translation Off
php_value mbstring.http_input           pass
php_value mbstring.http_output          pass
php_value mbstring.internal_encoding    UTF-8
php_value mbstring.detect_order         ASCII,JIS,UTF-8,SJIS,EUC-JP
php_value mbstring.substitute_character none
</IfModule>

上記の<IfModule mod_php5.c>~の設定はhttpd.confに直接追記しても動作します。
文字コード関連設定は、php.iniに設定してあるので文字化けしないはずなんですけど、なぜか、.htaccesにも設定するとなおりました。

参考サイト:
memolog -捨てるには惜しい程度のゴミ^^ / php_flag not allowed here
Andante .htaccessファイルを使ったPHPの文字コードの設定

Advertisements

One thought on “「Apache2.4.3+PHP5.4.7」セットアップ手順

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s