スレッド表示 | フラット表示〕 全トピック 920 件中 479 番目 次≫ ≪前

共通メニューにある画像のディレクトリー指定

created: 2005-02-09 00:25 | modified: 2005-02-10 02:36 | reply: 9

[2105] 共通メニューにある画像のディレクトリー指定

user: 宝屋 | created: 2005-02-09 00:25
はじめまして。
PHPで泣きたくなるぐらい苦労してるところでこのサイトを発見し、
藁にもすがる思いで書き込みさせていただきます。

今、includeを使った共通メニューを使用してサイトを作ってるところなのですが、
その共通メニューに画像やリンクを使っており、
ディレクトリーが異なると画像やリンクのディレクトリ指定が崩れてしまいます。
相対パスで書いてるから崩れるわけでしょうが、
絶対パスで指定するってのもスマートじゃないし・・・。

ディレクトリーが違う場所のファイルが共通ファイルを呼びだした場合でも、
画像やリンクの相対パスが維持されるようなPHPでの回避方法はないでしょうか?

http://www10.tok2.com/home/takaraism/testphp.lzh
<ここにサンプルを作って置いています。
<メニューの一番上の画像をクリックすると、
<ディレクトリhtml2にあるindex3.htmlが開きます。
<画像とリンクのパスが相対パスのため変な設定になってしまいます
reply: 2106 2107 返信 編集 削除

[2106] 検索エンジン対策に絶対URL

user: ゆうじ | created: 2005-02-09 01:37
わたしも同じことを考えたことがありますが、
検索エンジン対策で、リンクは絶対パスのほうが有利だと
どこかで読んだので止めました。
たとえば、http://localhost/php/bbs/index.php というURLに対して、
<a href="../index.php"> と記述したページと、
<a href="bbs/index.php"> と記述したページがあったとすると、
検索エンジンは別のページとしてデータベースに蓄積します。
同じページでも記述内容が違えば、別々に評価され、もったいないです。
リンクは、http で始まる絶対URLにそろえるのがオススメです。

おそらくこちらで読んだと思うのですが探しきれませんした。
●Su-Jine SEO 対策ディレクトリ型検索エンジン
http://www.su-jine.com/


どうしてもということであれば、
●2つのパス間の相対パスを得る
http://www.sound-uz.jp/php/note/relativePath
を参考に、画像やリンクのURLを動的に書き替えてみてください。
どこかにもっと良い方法があるとは思いますが残念ながら知りません。Help。
Parent: 2105  reply: 2108 返信 編集 削除

[2108] 解答ありがとうございます!

user: 宝屋 | created: 2005-02-09 11:23
なるほどSEO対策としても絶対パスの方が安心感がありそうですね。

●2つの絶対URL間の相対URLを得る
は参考になりました。
結構ややこしいですねえ^^;
FLASHのActionScriptでは
一旦ディレクトリー一階層に戻る_rootという関数があるので
そういったような関数があれば便利だったんですが(汗

今回の問題は絶対パスでクリアする事にしようと思います。
もしもっと手軽に出来る方法がありましたらぜひご教授お願いします^^

ありがとうございました!
Parent: 2106  reply: 2111 返信 編集 削除

[2111] わたしも絶対URL派です

user: シロウ | created: 2005-02-09 15:22
割り込みですみません。
わたしも ゆうじさんと同じくSEO対策としても絶対パスを使います。
箱さんのルートパスとも同じです。

config.phpなどを用意し、絶対パスを以下のように定義しています。
<?php
// SSLとか使うのでプロトコル部分も記述
define('BASE_URL','http://www.sound-uz.jp/php/');
?>
<img src="<?php echo BASE_URL; ?>bbs/all.gif">

PATH_INFOについて以下参考になります。
http://exam.su-jine.com/path_info/path/info.html

アマゾンなど?や&がないページ
http://www.amazon.co.jp/exec/obidos/ASIN/4844320254/sounduz-22/249-6756579-5132327
「sounduz-22」の部分はゆうじさん所のIDで他は商品IDかと?

SEOとか気にしないのであればPATH_INFOなしの、FrontControllerで相対パスを
使うのもよいのではないでしょうか。
Zendのノウハウより
http://www.zend.co.jp/tech/
$valid_arr = array('list', 'edit', 'delete', 'commit');

$act = $_REQUEST['act'];
if (!in_array($act, $valid_arr)) {
exit('bad act.');
}
include($act . '.php');

actへの値(読込モジュール名)がジャンジャン変わるだけでパスは変わらない。
index.php?act=list
Parent: 2108  reply: 2114 返信 編集 削除

[2114] なるほど・・・

user: 宝屋 | created: 2005-02-09 20:49
ルートパスの方が綺麗なソースに見えますが、
今制作しているのがお店の通販サイトだったりしますので
SEOの事を考えたら絶対パスの方がいいのかもしれませんね。

貴重な情報ありがとうございました!
Parent: 2111  返信 編集 削除

[2107] ルートパスではダメ?

user: | created: 2005-02-09 03:51
こんばんは。

単純に、ルートパスで記述というのではダメなのでしょうか?
例えば、

http://www.hoge.com/image/button1.gif

を表示したければ、

<img src="/image/button1.gif">

と記述すればどのディレクトリからでも呼び出せますよね。
(※もちろん、www.hoge.com内からの呼び出しという前提です。)

階層違いのディレクトリから画像呼び出しやリンクが必要なincファイル
を使う時は私はだいたいそのようにしています。

的外れなレスだったら御免なさい。
Parent: 2105  reply: 2109 返信 編集 削除

[2109] 解答ありがとうございます!

user: 宝屋 | created: 2005-02-09 11:32
メニュー部分が流用されるので、
画像やリンクのルートパス(相対パスの事?)が崩れるようなんです。

第一階層にメニューのPHPを置いているのですが、
<リンクの設定は<img src="img/img0.gif">です
第一階層のメニューの画像のルートは
http://www.xxx.com/img/img.gif
と出てきます。これはもちろんちゃんとみる事が出来ます。
それが、一つ下のディレクトリーに降りると、
http://www.xxx.com/dir/img/img.gif
と、その階層の中にimgフォルダーを探してしまうようなのです。
つまり、メニューのPHPは流用された別ディレクトリーを基本に相対パスを探してるようで。

すべて同じディレクトリ構成だったら問題ないんでしょうが・・・
PHPって難しいですねえ^^;

もし他にスマートで簡単なやり方がありましたら、
ぜひまた教えていただきたいと思います。
アドバイスありがとうございました。
Parent: 2107  reply: 2110 返信 編集 削除

[2110] RE:ルートパスについて

user: | created: 2005-02-09 13:38
こんにちは。

(※今回はゆうじさんご提案の絶対パス方式で対応されると
いうことのようですので、これはとりあえずルートパスに
ついての補足レスです。)


ルートパスというのは、そのサイトの最上位階層からのパス
のことです。リンクやアドレスを“/”(スラッシュ)から書き始める
ことによって、どの階層からでも、同じ記述で常にそのサイトの最上位
(=ルートパス)からみたパスを指定出来ます。

例えば、<a href="/">とすれば、どの階層から見ても常に
そのサーバのホームディレクトリへのリンクになります。
つまり、例えば宝屋さんの

<img src="img/img0.gif">
を、
<img src="/img/img0.gif">(※頭に/を付ける。)

とすると、どの階層から見ても常に
http://www.xxx.com/img/img0.gif
を指すことになります。
Parent: 2109  reply: 2113 返信 編集 削除

[2113] そ、そうだったのですか!

user: 宝屋 | created: 2005-02-09 20:47
<img src="img/img0.gif">

<img src="/img/img0.gif">
は、
まったく違うものだったのですね!
これはかなり長い間大事な事を知らなかったって事ですね、私^^;

って事は私が箱さんの書きこみを理解してなかったわけですね。
大変申し訳ありませんでした。
そして、とても大事な事を教えていただきありがとうございました。
Parent: 2110  reply: 2116 返信 編集 削除

[2116] 蛇足なのですが。

user: ごいんきょ。 | created: 2005-02-10 02:36
そのような形での絶対パスで記述する場合。
つまりURL完全方式(造語)での記述じゃない場合。
中には実際のパスで指定しなければならない場合もあります。
もちろん、HTMLタグには、そういったものはありえませんが。

中には。
個人のではなく、サーバ全体のドキュメントルートから。
つまり実際にファイルが置いてある場所を、ローカルパスで指定しなければならないんです。

詳しく説明すると。

普通、1つのサーバを個人で占有することは、ないですよね。
そういう場合、仮想ドメインを設定して、複数の人にアカウントを発行して振りわけます。
僕が、goinkyoというIDでサーバ・スペースを使わせてもらっていたとします。すると多くはこんな形になると思います。

URL http://goinkyo.domain.jp/ファイル名

ローカルパス /サーバ全体のルート/virtual/goinkyo/public_html/

ID:goinkyoさんは、public_html/以下にファイルをアップロードして、http://goinkyo.domain.jp/という基準の、URLを使わせてもらうわけです。

話を戻して。
関数の中には、絶対パスで指定する場合、このパスで指定しなければならないものがある、ということです。

function("/virtual/goinkyo/public_html/noname.file")

などのように。
URLで見たルートからだと、指定できないことがあるんです。


混乱させるようなことを、しかもうだうだと、すいません。
蛇足でした。
自分自身、混乱しています。

ただ、ルートで指定できるはずなのに、うまくいかないぞ?というとき。
そういえばローカルパスがどうとか、聞いたことがあるな、と思い出していただければ。
ルートパス指定が初耳ということなので、参考までに。

ちなみに、上記、仮想ルートの実パスは、$_SERVER["DOCUMENT_ROOT"]でとれます。
Parent: 2113  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 479 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑