- ベストアンサー
PHPをインクルードした時の画像パスについて
- PHPでページをインクルードする際の画像パスについて、階層が異なる場合の対処方法を教えてください。
- 階層が異なるデータに共通のインクルードをする際に、画像パスが正しく表示されない場合の解決策を教えてください。
- PHPを使用してページをインクルードする際に、階層が異なる画像のパスを正しく指定する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答が遅くなってしまってすみません。 ぶっちゃけ コロッと忘れておりました。 ざっくりと説明しますと、index.html に <?php $Path = "common/img/"; include("common/aaa.html"); ?> んで、aaa.html の <img>タグのところに <img src='<?php print $Path; ?>gazou.jpg'> とすれば良いんじゃないかな~って事でした。
その他の回答 (2)
- bm_hiro
- ベストアンサー率51% (200/388)
え~っと。。。正直、俺も混乱してきました。 とりあえず、俺の認識が間違っているのかもしれませんが、絶対パスと相対パスの使い方が違っているのかもしれません。 本当は 俺は 絶対パスは「http://」から始まる使い方しかしませんし、相対パスは「./」か「../」で始まる使い方しかしません。 そもそも絶対パスを使うのは、ドメインが違う所に対してしか使う事がないかもしれません。 なので 何か お互いに認識の違いがあるような気もしないでもないです。 んでは、#2のお礼に書かれてることに対してのお返事です。 --- ここから ---- 別に <?php $Path = "common/img/"; include("common/aaa.html"); ?> だろうが <?php include("common/aaa.html"); ?> <?php $Path = "common/img"; ?> と書こうが一緒ですよね --- ここまで ---- んー、厳密には違いますね。 下のほうの2行だと、$Pathという変数の指定前にinclude してしまっているので、include された段階では $Path の中身は 空であるか別のものである可能性があります。 んで、そちらの書いたツリーを流用すると、以下のような感じと言うことですよね? -------- index.html common ├aaa.html ├bbb.html ├img ├gazou.jpg ├gazou2.jpg salon ├hair ├kari ├index.html ├access ├ ├index.html ├menu ├ ├index.html ├img ├aaa.jpg -------- 仮にドメインをwww.hoge.jpとします。 www.hoge.jp/salon/hair/kari/access/index.html から www.hoge.jp/salon/img/aaa.jpg を 呼び出そうとした場合、↑のファイルに書く<img>タグは 以下のような感じになります。 <img src='../../../img/aaa.jpg'> 同じ画像を www.hoge.jp/common/aaa.html から呼び出そうとすると以下のようになります。 <img src='../salon/img/aaa.jpg'> どの階層のファイルを どの階層からincludeしても変わる事のない書き方が、絶対パスを指定する以下の書き方です。 <img src='http://www.hoge.jp/salon/img/aaa.jpg'> そういや どんな話の流れで 相対パス縛りになってしまったのか、自分でもいまいちよく分かりませんが、http://から始まる指定してしまえば、階層を気にしなくて済みます。
- bm_hiro
- ベストアンサー率51% (200/388)
とりあえず、相対パス云々に関しては、ブラウザの挙動を考えると分かりやすいかと思います。 ブラウザは HTMLを読み込んでから、<img>タグの画像を読み込みに行きます。 なので、そのHTMLからのパスを書かなければいけません。 階層が違うのに関しては、インクルード元で変数に入れて渡せば良いんじゃないかと思ったり。
お礼
ありがとうございます。 やはりそのHTMLからのパスになるのですね。 ということは、相対パスではなく、/から始まる絶対パスですね。 変数に入れて渡すという レベルのことは まだ私の技量ではできません。。 画像パスを変数にしておくということでしょうか?
お礼
ありがとうございます。 なんとなく、わかってきました! 一緒になってるから、一瞬少し(?)と思いましたが 別に <?php $Path = "common/img/"; include("common/aaa.html"); ?> だろうが <?php include("common/aaa.html"); ?> <?php $Path = "common/img"; ?> と書こうが一緒ですよね パス自体を変数としておくということですね。 確かにこの方が後々、便利になりますね。 今現在、お店ページで共通で使う画像については salon/img/の中に入れているので 仮にkariページのaccess/index.htmlでは パスとして ../../../aaa.jpg としてるのですが これも <?php $aaa = "salon/img/aaa.jpg"; ?> でいいということですか? でもsalon/hair/kari/index.htmlとsalon/hair/kari/access/index.html は階層は違うし、絶対パスでないとこのやり方はできないですよね すいません、頭がこんがらがってきました