Windows 7でApache+PHP+MySQLを構築・VirtualStoreの罠へ!

さて、メインパソコンがXPからWindows 7になったということで、プラグインやテーマのデバッグのためのWordPress用ローカルサーバを構築することにしました。結果として構築はできたものの、最初から躓きっぱなしで半日以上をつぶす結果になりましたが…。具体的に何で躓いたかというとこんなところ。

  • Apacheの設定ファイルhttpd.confでlocalhostとしたいフォルダを指定しているのに反映されない
  • PHPもMySQLも入れたのにPHPファイルからMySQLデータベースにアクセスするとページが開かない
  • WordPressのトップページは開くのに個々のページは本当の404エラーを返す

ここでは備忘録もかねてそれぞれの構築を記しておこうと思います。今回のインストールで最も重要なキーワードはVirtualStoreです :mrgreen:
(それ以外は別にWindows 7じゃなくても問題になるときは問題になるので 😛 )

WordPressに必要なものはPHPモジュールとMySQLというデータベースソフト。そしてこれらを動かすためのサーバソフトであるApacheです。今回利用したのバージョンは現在の最新である下記のものです。

  • Apache 2.2.14
  • PHP 5.2.10
  • MySQL 5.1.40

そしていずれもインストーラつきのものを選択。めんどくさかったので手間を省くためにせんたくしたのですが、これがそもそもの罠にはまる始まりでした。

というのも、インストーラは指示に従ってインストールするといずれもProgram Filesというフォルダに保存されます。XPなら別段これといって問題はありません。XPなら。今回はWindows 7にインストールしているというで、問題にぶち当たるのです…。


Apacheの設定で指定したフォルダをlocalhostとして開けない

まずはApacheをダイアログに従ってインストール。インストールしました。ダイアログでNetword DomainとServer Nameを聞いてきますのでlocalhostを、メールアドレスも適当で。ネットワークに繋がずローカルでしか動かしませんから。その後CompleteかCustomか選択できますがCompleteで。インストールフォルダもデフォルトのまま。そうしてインストールは無事終了。

続いてPHPをインストール。インストーラに従ってインストールを進めていくといろいろと聞かれます。まずApacheのバージョン。次にApacheの設定ファイルであるhttpd.confのあるフォルダ。そして一緒にインストールするモジュールの選択。ここでは次のものを選択しました。(うろ覚えの知識で選択して入れたので入れ忘れがあるやも…)

  • MySQLモジュール
  • MySQLiモジュール
  • PEARモジュール
  • mbstringモジュール(マルチバイトを処理するもの)

ここでもインストールするフォルダはデフォルトのまま。そうしてインストールしたんですが、最後の方でhttpd.confに設定を書き加えられなかったから手動で変えてねというダイアログが出たんです。ここで気づけば良かったものの、気にせずそのまま放置しました。そして手動でhttpd.confの変更。デフォルトのフォルダ設定のままインストールした場合、このファイルの中のDocumentRoot<Directry “”>

C:/Program Files/Apache Software Foundation/Apache2.2/htdocs

となっているところを変更することでlocalhostとしたいフォルダを指定できるので変更し、Apacheサーバを再起動させることでその変更が反映される…はずなのですが設定が更新されませんでした。ファイルの変更箇所を見てもきちんと変更されているのに、実際は設定は反映されないのです。

で、他にhttpd.confがないかと検索。…と、出てきました。なぜかUserフォルダから。正確には

C:\Users\[ユーザー名]\AppData\Local\VirtualStore

の中に新たにProgram Filesができ、そこからApacheの設定ファイルがあるフォルダと同じ構造でフォルダができ、そのフォルダの中にhttpd.confができてたのです。そこでキーワードっぽいVirtualStoreを調べてみました。そこで見つけたのがこちら。

Windows Vista の VirtualStoreファイルについて

Windows XPまでは、一般ユーザーは設定を変更する事ができず、管理者のみが設定を行い、管理者が行った設定を、一般ユーザーは利用する事ができるという、設定を共有していました。

Windows Vistaからは、一般ユーザーの権限で設定を行うと、仮想の設定ファイルや、レジストリに、そのユーザー用の設定が作られます。

ただし、そのユーザーの仮想ファイルや、仮想レジストリがなければ、今まで通りに、管理者が行った設定を共有する事になります。

(…略…)

Windows Vistaでは「ユーザーアカウント制御 ( UAC )」という機能が追加されました。

これは、Administrator でログオンしていても、通常の操作は 一般 User として処理を行います。そして、管理者の権限が必要なファイルやレジストリにアクセスする際に、確認の画面が表示されます。これに「続行」または「許可」する事で、管理者権限として処理を行うようになります。

  1. 右の図を例にすると、Windows VistaへAdministratorとしてログオンします。
  2. ログイン直後は、一般ユーザーとして、振舞います。
  3. 処理を行う際に、その操作に「管理者権限」が必要な場合には、許可を得た後に管理者として操作を実行します。
  4. 「管理者権限」の必要な処理が終了すると、再び一般ユーザーとして振舞います。

管理者の権限が必要なケースは、Windowsが判断するケースもありますが、コンピュータを操作するユーザーが、判断しなければならないケースもあります。


…そう、Program Files内は管理者権限のいるフォルダなのですが、管理者としてではなく一般ユーザとしてhttpd.confをいじったためにVirtualStoreに変更した仮想ファイルが保存されApacheはこのUAC機能に対応していないので変更した仮想ファイルの方ではなく、変更されてない大元のhttpd.confの設定が参照され、localhostで見てほしいフォルダへの変更がされなかったというわけ。さらにはPHPインストールの最後の方で『httpd.confが変更できなかったので…』というダイアログも管理者権限でインストールしていなかったのでhttpd.confへPHPに関する変更ができなかったということ。

これを回避するには管理者権限のかかってないフォルダへ変更したいファイルをいったんコピーして編集し、その編集したファイルを元のファイルに上書きコピーをしてやれば変更は反映させることができます。

…が、せっかくのインストーラなのに後で手動編集するのはめんどくさい手間がかかるので、一度アンインストールしてから管理者権限のかかってないフォルダを別に作ってそこへインストールすることにしました。この方法でApacheの設定ファイル・httpd.confも無事編集でき、PHPのインストーラからのhttpd.comf編集もダイアログが出ることもなく無事終了することができました。

PHPファイルからMySQLデータベースへアクセスするとページが開けなくなる

そうしてMySQLのインストール。こちらもインストーラから標準でインストール。MySQLについてはインストールフォルダも変更することなく入れました。その続きで設定ウィザードが立ち上がるので、それを利用して設定。インストールウィザードが英語なので設定内容はMySQL :: MySQL 5.1 リファレンスマニュアル :: 2.3.4 設定ウイザードを使用するを読みながら。日本語と英語を比較しながらの設定となりますが…。

さて、ここまで行けばMySQLがPHPで接続できるかを試すだけ。…なのですが、何度試してもPHPからMySQLに接続するところでPHPファイルが開かなくなるのです。これももう悩みまくりましたね。

…で、結局こちらはインストール後に再起動をしてやらなかったためにWindowsに設定されたPathが通ってなかっただけ。再起動してやるだけであっさり実行できるようになりました。

でもPHPからMySQLを操作するスクリプト・phpMyAdminを実行してログインすると

お使いの PHP MySQL ライブラリのバージョン 5.0.51a が MySQL サーバのバージョン 5.1.40 と異なります。これは予期しない不具合を起こす可能性があります。

なんていうエラーが。ネットで調べるとlibmysql.dllだの、php_mysql.dllだののバージョンが違うとかなんとか。置き換えてみたものの、またもPHPファイルがMySQLにアクセスした際に開けなるという状態になったので結局いじらない状態にしておきました。

WordPressのトップページは開くのにそこから個々のページが開かない

ここまででようやくWordPressを復活させるための下準備が完了。Windowsのアップグレード前にエクスポートしたWordPressのデータベースをインポートする形で復元し、WordPressをブラウザーで表示。無事にトップページが表示されました! 🙂

…と思ったのもつかの間、トップページから個別のページに行くと本当の404エラーに見舞われるという始末。原因はApacheのhttpd.confのうち、<Directry>による設定の一つであるAllowOverrideの設定がまずかったから。あらかじめ設定されているNoneをAllにし、WordPress側でパーマリンクの設定をデフォルトに戻した後で再度パーマリンクの設定を復活させる形で設定してやり、WordPressに.htacessを吐かせれば終了。ようやく両手を挙げて復活を喜べるようになりました。


こうして今は無事ローカルにWordPressのデバッグ環境を構築できたものの、半日をつぶす羽目になったのはかなり痛いなぁ…と。そして以前い書いた記事を読み返してみると、そのときは「ほぼ1日つぶした」なんて書いています。…振り返ってみると全く学習能力はないんだろうか…とげんなりしてしまいました。

…まぁ、こういう環境の構築は一度作ってしまえば余程のことがない限りいじりませんから、反復的に学習すること何でほとんどないんで仕方のないことと言えばそうなんだと思います。ってか、そう思わせてください… 😥

ちなみにここで取り上げたVirtualStoreなどを扱うユーザーアカウント制御システムはVista以降のWindowsから組み込まれてます。Vistaでもインストーラで管理者権限で扱うフォルダにインストールすると同様の現象に見舞われると思いますのでご注意ください 😉

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です