アプリ版:「スタンプのみでお礼する」機能のリリースについて

ホームページの作成の際に、各ページの共通部分、例えばヘッダー等を
phpファイルを作成しておいてrequireする時について質問です。
header.phpファイルに共通するヘッダーを記載しています。
このファイルの中には<a href="./****">というようなリンクや
<img src="./***">というイメージのパスが相対パスで記載されていますが、
各ページの階層が違う場合には、このまま取り込んでしまうと、
各階層によって相対パスは異なるので、うまく表示されないのですが、
requireされたページによって、こういった部分を書き換えることは、
可能なのでしょうか?
それとも絶対パスで書かなければならないのでしょうか?
初歩的な質問で申し訳ございませんが、ご教示願います。

A 回答 (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は関係なく動くと思いますので、記述したパスが間違っているのではないでしょうか。
    • good
    • 0

相対パスの書き方として、「/」から始まるパスで記述してやればさほど気にならないかと思います。



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>
といったように記述してやれば、正しくリンク出来ます。

といった方向で記述するのが最も簡単かなと思いますが、いかがでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがございました。
私はあまりというか、ほとんど”/”から始まるパスを書いたことが
無いんですが、これは絶対パスと考えていいんでしょうか。

現在はWindows上で作成してWebにはアップしていないんですが、
”/img/*****”だと上手くいきませんでした。
Windows上で”/”から始まるパスを書く場合は環境変数に
追加しなければならないんでしょうか。
であれば、Web上であれば上手くいきそうですよね。
ご教示ありがとうございました。

お礼日時:2011/01/03 14:09

一番手っ取り早いのは、やはり各階層毎にイメージファイル等を


アップロードすることだと思いますが、質問内容を見る限り
膨大な数のファイルがあるのですよね?

となれば、率直に思いつくのは画像のディレクトリまでのパス自体を
変数としてセットしておいて、実際に画像を表示するパスを
変数を含めたパスとして扱うようにすれば良いのかと思い・・・

例えばこの様な感じで

--------------------------------------------------------------------

<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文等の条件分岐で実装してみるのも面白いかも
しれませんね。

とりあえず簡単に思いついた方法ですので、参考までに。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
仰っていただいた通り、画像が大変多く、階層もかなり多いんので、
各階層毎に画像をアップするのはつらいかと・・・・
変数として用意すれば、いいんですね!

私が一応最終的に選択したのが下記の方法なんですが・・・
1.共通のヘッダーファイルをPHPで作成。

2.絶対パスと絶対パスを渡すと、その相対パスを求める関数含めた
ファイルを作成。

3.共通ヘッダーファイルでは、呼び出しファイルの絶対パスと、
共通で使用するファイル(画像、スタイルシート、JavaScriptシート、
リンク等)の絶対パスを渡して、呼び出し元から共通ファイルへの
相対パスを求めて、呼び出されたファイルによって動的に相対パスを
作成して、記載。

こうすると共通のヘッダーファイルだけ変更すれば、全てのページに
反映されてメンテナンスは簡単なんですが、最初の作成が
多少面倒ですし、王道ではない感じがします。
それとページが呼び出された際に、まずヘッダーファイルをrequireして、
ヘッダーファイルでは、相対パスを求めるファイルをreqireしますが、
これはページの読み込み速度に影響するのでしょうか・・・・
多少遅くなったような感じが、気のせいかもしれませんが・・・・

お礼日時:2011/01/03 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!