- ベストアンサー
phpの階層が変わると上手く読み込めない
構造は以下のとおりです。 ルートディレクトリ │ ├ index.php ├ php(フォルダ) │ └ a.php │ ├ html(フォルダ) └ menu.html └ b.html └ c.html メニューと実際のコンテンツを分けようと思い、index.phpでrequireを用いて、実際のコンテンツである「b.html」とメニューである「menu.html」を読み込んでいます。 メニューには、A href="php/a.php"という具合にリンクを貼っています。 「c.html」に飛ぼうとする際は、a.phpにリンクを貼り、そこで「menu.html」と「c.html」を読み込むという具合です。 その際、一度目(ルートディレクトリ基準)は正常に読み込みます。 その際のパスはhttp://省略/php/a.phpです。 しかし、a.phpに飛ぶと、a.phpを基準にしたパスになってしまいます。ですから、a.phpで再びmenuのリンクをクリックしてa,phpに飛ぼうとすると、パスが http://省略/php/php/a.php となってしまって上手く読み込めません。 分かりにくい説明で申し訳ありません。 これを解決するには、絶対パスを使って指定するしかないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そういった時、私は絶対参照を指定するようにしています。 但し、カレントURLがズレるから悪いのだから、ズレない URLを持ちます。 必ず読み込むconfig用ファイルを用意し、その中にルートURLを 定義して、リンクを記述するhtmlファイルをphpファイルに 変更して、リンク指定に、ルートURLを指定した上でphp/a.phpと指定します。 config.php define(ROOT_URL, "http://localhost/"); c.php <a href="<?= ROOT_URL ?>php/a.php">~</a> という感じに。 環境が変わりURLに影響があったら、config.phpを 変更するだけで対処可能です。 というのを、昔やりました。 実際の処理にPHPを利用しているのだから、htmlしか 出力しないからhtmlファイルとしていても、PHPとして 動作させたって支障はないはずです。
その他の回答 (1)
- syuuiwsd
- ベストアンサー率56% (17/30)
a.phpにも <a href="php/a.php">a.php</a>のようなリンクが張っているのでしょう? やはり絶対パスを使って指定するほうがいいと思います。 どうしても相対パスを使いたければ、a.phpでパスの判断が必要ですね。例えば $currdir = getcwd(); if( preg_match("/(\/php)$/", $currdir ) echo "a.php"; else echo "php/a.php"; 以上のプログラムはイメージです。動くかどうか確認していません。 ご参考まで
お礼
回答ありがとうございます。 やはり絶対パスを使うのが懸命なようですね。 おとなしく絶対パスを使用したいと思います。 相対パスの際のプログラムのイメージも記述していただき、ありがとうございました。
お礼
回答ありがとうございます。 経験に基づく具体的な方法を示していただき、参考になります。 調べても、解決策が出てこないので、この方法でいこうかと思います。 ありがとうございました。