その他Web制作

.phpを含むサイトでドキュメントルートをwebapp以下に変更したら混乱した

この記事は2019年以前他サイトに執筆したものを引越し掲載しています。

ルートディレクトリをhoge/public_htmlからhoge/webapp/public_htmlに切り替える際に問題が発生したのでメモ。

結論から言うと、PHP側のルートディレクトリとサーバー側のルートディレクトリがずれていることがあるのでちゃんとどちらかに合わせるように設定しようという話。

デザイナー一年生なのでphpやApacheの知識が浅すぎて(ほぼゼロ)、意味が伝わらない記事になってしまうかもですが、初心者デザイナー的なざっくりした理解・備忘録。

経緯

server(Apache)側の設定でルートディレクトリを元のpublic_html直下からwebapp直下のpublic_htmlに変更。

hoge/public_html → hoge/webapp/public_html

しかしhoge/webapp/public_htmlの中のhogehoge.phpが読まれない事象が発生。

(.html、cssやimgは読まれる。つまり.html、cssやimgのルートディレクトリはちゃんと切り替わってhoge/webapp/public_htmlになっていた。)

phpだけがなぜか切り替わらずにルートがhoge/public_htmlのまま?

ちなみに元のhoge/public_html には同階層、同名のまま全ファイル残してあったので、hoge/public_html/hogehoge.phpが読まれているのを確認後、hoge/webapp/public_html/hogehoge.phpの方は読まれていないからと思って消すとhogehoge.phpが表示されなくなる。どゆこと?

 

いろいろ試した結果、両方のディレクトリ(hoge/public_html  と hoge/webapp/public_html)に同階層、同名で.phpを置かないと表示できないという結論になった。

解決はPHPinfo

こういう時はPHPinfo。PHPinfoとはPHPに設定されている情報を表示させる関数です。

※あと他にデザイナーだとしても知っておくべきキーワードは「php.ini」です。

調べ方

<?php echo phpinfo() ?>

とだけ書いたphpファイルを作成し、info.phpなどの適当な名前(なんでもいい)をつけてサーバー上にアップします。場所はどこでもいいのでドキュメントルート下などがいいかと。

※今回はどこがルートなのか自体が問題だったので複数配置しました。で、そのURLをブラウザ入力。

info.phpという名でドキュメントルート下に置いたなら

(IPまたはドメイン)/info.php

ちなみにこのphpファイル(ここではinfo.php)は使用後は必ず削除すること(serverなどの大事な情報が流出しちゃうのでセキュリティ上絶対)。

すると青い一覧表みたいなページが出ます。(「PHPinfo」で画像検索するとイメージが見れます)

その中から

$_SERVER[‘CONTEXT_DOCUMENT_ROOT’]
$_SERVER[‘DOCUMENT_ROOT’]

という部分を探します。(項目多いのでctrl+Fで。)

するとこう書いてありました。

/home/hoge/webapp/public_html

↑これがサーバーの設定のドキュメントルートです。切り替えた設定どおり。

 

次にPHP側のドキュメントルートを調べます。

doc_root

というのを探します。

/home/hoge/public_html

と書いてあり、これがPHP側のドキュメントルート。

サーバー(Apache)とPHPでドキュメントルートが食い違いました。

 

サーバーくんはドキュメントルートは

/home/hoge/webapp/public_htmlでしょ

って思ってここから読みはじめます。

でもPHPさんはドキュメントルートは

/home/hoge/public_htm

ですよね。って言っているわけです。

 

表向きのファイルの位置はサーバーくんの方、実体はPHPさんの方みたいな感じになっています。

 

で操作している私としては中身を変えて反応があるのはPHPさんの方(/home/hoge/public_htm以下)なのでこちらだけが読まれていると勘違いしていましたが、

まずサーバーくんがファイルの存在を確認(/home/hoge/webapp/public_html)できないとPHPさんは出てこれません。

これがおそらく同階層同名で両方に置いておかないとダメだった理由。

 

なのでこの場合の解決策(というより一時的な対応)としては

  1. 両方(hoge/public_htmlとhoge/webapp/public_html)のディレクトリ構成とファイル名はすべてきっちり合わせる。
  2. サーバー側が読んでいる方はファイル名だけあれば中身は空でもよい。
  3. 実体のPHP側を更新していく。

ということで一応ずれたままでも運用できることがわかりました。

(解決策と言いつつ全く解決してはいないが)

ほんとは設定しなおして統一した方が良いのだけどとりあえずの対応。一時的なテスト環境だから。

デザイナーも浅くていいから広い理解が必要

今回の問題はCMS開発絡みで、サーバー担当者、開発担当者、でそれぞれザクっと進めてしまった感じで起こりました。

制作しかわからない私大混乱。こういう問題は、解決してしまえば本当に単純。

でも実際リアルタイムの現場ではいろんな要因が絡み合っている風に見えます。

(phpインクルードを使いかけていてドキュメントルート取得の記述が残っていたのでそれが関係あるのか?ってなったり、 CodeIgniter設置後だったのでそれが一番疑われたり…)

現場は問題の切り分けと検証が大変でした。

 

ポジションはデザイナーでも、実質総合Web屋さんとしてやっている以上こういったことも覚えていかなきゃです。勉強勉強。

訓練校時代や就活中などによく耳にしていた、プログラムやサーバーなど他部署とコミュニケーションできるくらいの基礎知識って本当に大事なんだなっていうことを痛感しました。

 

しかしこのルートディレクトリがずれた状態は意図的に設定して何かに使えるのだろうか。サーバー側が認識するファイル名には実体がない的な。わざとずらすっていう秘技?…今はテスト環境なのでこのままでもとりあえずOKですが本番でも運用していったらどういった問題が起こり得るのだろうか。