- ベストアンサー
Webページの共通部分をPHPで記載する方法
- Webページの共通部分をPHPで記載する方法について質問です。ホームページの作成の際に、各ページの共通部分をphpファイルにまとめておく方法について教えてください。
- header.phpファイルに共通するヘッダーを記載しています。しかし、各ページの階層が異なる場合に、相対パスのリンクやイメージのパスがうまく表示されないことがあります。
- requireされたページによって、相対パスの部分を書き換えることは可能なのでしょうか?それとも絶対パスで書かなければならないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これの正しい呼び方はイマイチよくわかってないですが、「/」から始まるパスは、ドメイン以下のディレクトリパスとしては、絶対パスになりますね。 http://www.example.com/img/test.jpg は、 /img/test.jpg と表すし http://www.example.com/subdirectory/img/hoge.jpg は、 /subdirectory/img/hoge.jpg になります。 Windowsでは表示されないということですが、ApacheなどのWebサーバ上から確認されたのであれば、 OSは関係なく動くと思いますので、記述したパスが間違っているのではないでしょうか。
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
相対パスの書き方として、「/」から始まるパスで記述してやればさほど気にならないかと思います。 img/header_logo.jpg という画像があったとして index.html contents/page1.html というコンテンツがある場合、 <img src="/img/header_logo.jpg" /> とIMGタグを記述してやれば、 contents/page1.html で呼んでやっても、 index.html で呼んでやっても、画像が表示されます。 index.htmlでcontents/page1.htmlのリンクタグを入れる場合も、 <a href="/contents/page1.html">リンク</a> といったように記述してやれば、正しくリンク出来ます。 といった方向で記述するのが最も簡単かなと思いますが、いかがでしょうか。
- nazal2010
- ベストアンサー率54% (12/22)
一番手っ取り早いのは、やはり各階層毎にイメージファイル等を アップロードすることだと思いますが、質問内容を見る限り 膨大な数のファイルがあるのですよね? となれば、率直に思いつくのは画像のディレクトリまでのパス自体を 変数としてセットしておいて、実際に画像を表示するパスを 変数を含めたパスとして扱うようにすれば良いのかと思い・・・ 例えばこの様な感じで -------------------------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php // 画像のディレクトリまでのパス $a = "http://www.ドメイン/image"; // 画像の表示 echo "<img src= $a/home_main.png>"; ?> </body> </html> -------------------------------------------------------------------- 【 $a = "http://www.ドメイン/image"; 】 この構文さえ各ファイルに記述しておけば、たとえどんなに深い階層に ファイルを設置しても、呼び出しには行ってくれますよね。 ( 事実上絶対パスなので、当然ですが ) こうすると、リンクの呼び出しも同じ要領で出来ますよね。 この様な方法で効率的なのかどうなのか、ですが・・・ 時間があるのでしたら、if文等の条件分岐で実装してみるのも面白いかも しれませんね。 とりあえず簡単に思いついた方法ですので、参考までに。
お礼
ご回答ありがとうございました。 仰っていただいた通り、画像が大変多く、階層もかなり多いんので、 各階層毎に画像をアップするのはつらいかと・・・・ 変数として用意すれば、いいんですね! 私が一応最終的に選択したのが下記の方法なんですが・・・ 1.共通のヘッダーファイルをPHPで作成。 2.絶対パスと絶対パスを渡すと、その相対パスを求める関数含めた ファイルを作成。 3.共通ヘッダーファイルでは、呼び出しファイルの絶対パスと、 共通で使用するファイル(画像、スタイルシート、JavaScriptシート、 リンク等)の絶対パスを渡して、呼び出し元から共通ファイルへの 相対パスを求めて、呼び出されたファイルによって動的に相対パスを 作成して、記載。 こうすると共通のヘッダーファイルだけ変更すれば、全てのページに 反映されてメンテナンスは簡単なんですが、最初の作成が 多少面倒ですし、王道ではない感じがします。 それとページが呼び出された際に、まずヘッダーファイルをrequireして、 ヘッダーファイルでは、相対パスを求めるファイルをreqireしますが、 これはページの読み込み速度に影響するのでしょうか・・・・ 多少遅くなったような感じが、気のせいかもしれませんが・・・・
お礼
ご回答ありがございました。 私はあまりというか、ほとんど”/”から始まるパスを書いたことが 無いんですが、これは絶対パスと考えていいんでしょうか。 現在はWindows上で作成してWebにはアップしていないんですが、 ”/img/*****”だと上手くいきませんでした。 Windows上で”/”から始まるパスを書く場合は環境変数に 追加しなければならないんでしょうか。 であれば、Web上であれば上手くいきそうですよね。 ご教示ありがとうございました。