2014年4月13日

Apacheとphpでウェブサービス作るときの備忘録

 マルチバイト文字(日本語とか)を使ったフォルダを使っているとダメという話です。

 Apacheとphpとmysqlを使ってwebシステムを作っているのですが、作っているシステムがどうしても動かなくて悩んでいました。
 ふつーは、そのシステムがそもそも動かないんじゃないの?って話になるんですが、違う環境でやると動くのでプログラム的には問題ありません。

環境を軽く書くと以下のとおりです。

最初に動いていた環境


  • OS:Windows7
  • Webサーバー:IIS

動かなくなっていた環境

  • OS:Windows7
  • Webサーバー:Apache

動かなくなった環境で実行するとPHPのソースがそのまま表示されたり、「Fatal error: Unknown: Failed opening required…」と表示されたりいろんなことが発生しました。

結局何が問題だったかというとapacheのDocumentRootに設定していたディレクトリのパスに日本語が含まれていたことです。
 この原因でエラーになっているというのに気づくまですごく時間がかかってしまいました。

 さらに、時間を喰った原因としてWindowsには、シンボリック・リンクという機能があって、フォルダの別名(ショートカットとは違う)を付ける機能があるのですがそれを使えば解決できるのではないかと考えてその設定をしてしまったことです。
 いくらシンボリック・リンクを使っても日本語が含まれるとダメなんですよね(内部的には実際のフォルダ名を使っているんでしょうね。)

なので、apacheで日本語を含むディレクトリでの開発はしないようにしましょう。


なぜこうなったかというとこんな経緯があります。
ごく当たり前の対応だと思います。

  1. プロジェクトのフォルダは日本語名を付けてわかりやすくしたい
  2. ソースはそのフォルダ内に入れておきたい

ですが、これをするとapacheで使えなくなるので方式を考えました。


旧フォルダ構成

140001_日本語のプロジェクト名
   develop
      src        (←ここにソースを入れている)

新フォルダ構成

140001_develop
    src        (←ここにソースを入れている)
140001_日本語のプロジェクト名
   develop    (140001_developフォルダをシンボリックリンクでリンク)
     src

これでプロジェクトフォルダ一つでまとめて管理ができるようになります。
そもそも2つに分けたんだったらそのままえいんじゃ無いの?ってのもありますが…。


教訓

システム開発時のソースファイルは必ずアルファベットと数字だけのフォルダにすることっ!

0 件のコメント:

コメントを投稿