• ベストアンサー
  • 困ってます

PHPのinclude_onceで外部ファイル化したサイトURLがリン

  • 質問No.5991493
  • 閲覧数505
  • ありがとう数15
  • 回答数4

お礼率 88% (704/796)

PHPのinclude_onceで外部ファイル化したサイトURLがリンクしてくれない。
Webサイト制作中ですが、サイトURLをいたるところに記述するのと、同じ構造のサイトをいくつも制作するので、使い回しにもなるということで、サイトURLだけを記述したurl.phpという外部ファイルを作成しました。

すると、少なくとも以下のような場合、リンクをクリックするとページが存在しないというページが開いてしまいます。
どうやら相対パスと勝手に解釈されてhrefタグの記述がおかしくなるようです。
どうやって直せるでしょうか?

●リンクをクリックして開いたブラウザアドレスバーに出たURLは以下です。

http://僕のサイト.jp/syohin/%EF%BB%BFhttp://xn--u9jxf0b3dt27s.jp


●ブラウザ下部のステータスバーに出ているリンク先は以下です。

http://僕のサイト.jp/product/http://xn--u9jxf0b3dt27s.jp


●HTMLの記述は以下です。

<a href="<?php include_once("url.php"); ?>" title="僕のサイト.jpのトップへ">僕のサイト.jpのトップへ</a>


●url.phpに書いた記述はサイトURLだけです。以下です。

http://xn--u9jxf0b3dt27s.jp

url.phpを置いているディレクトリへのパスがおかしいのか?と思い、サイト最上階、つまりindexがある一番上の階層にurl.phpをアップロードしてもみたのですが、結果は同じでした。


以下のように「../」とつけてもダメでした。

<a href="../<?php include_once("url.php"); ?>" title="僕のサイト.jpのトップへ">僕のサイト.jpのトップへ</a>

外部ファイル化して共通部分を沢山つくているのでどうしても相対パスではダメな部分が沢山あるので何とかしたいのですが・・・

質問者が選んだベストアンサー

  • 回答No.3
  • ベストアンサー

ベストアンサー率 58% (378/648)

 PHPの仕様では、include_onceで読み込まれたファイルの先頭ではいったんHTMLモードに戻されます。そして、ファイルが終わったところでPHPモードになります。通常、includeするソースファイルでも「<?PHP」でPHPモードの始まりを記述し、最後に「?>」で括っても括らなくても動作するのはこのためです。

 したがって、include_onceで読み込むファイルにテキストだけが書かれてあり、include_onceしているPHPのブロック内に他に処理がなければ、ファイルの中のテキストがPHPのブロック全体と置き換わります。

 つまり、

> <a href="<?php include_once("url.php"); ?>" title="僕のサイト.jpのトップへ">僕のサイト.jpのトップへ</a>

 この記述自体は間違ってないし、手元の環境で試したところではこれできちんと展開されるのですが……(もっとも、include_onceだから同一ファイル内で複数同じ記述があった場合はきちんと置き換わる保証はありません。こういう用途の場合はincludeの方が良いかな)
 PHPの文法の問題じゃなくて、それ以外でURLが相対アドレスとして扱われる処理が働いているような気がします。

 ところで、ここをinclude_onceせずに、url.phpの中身を直接記述した場合はどうなるのでしょう?
補足コメント
touchy

お礼率 88% (704/796)

言い忘れていましたので補足欄で。

> ところで、ここをinclude_onceせずに、url.phpの中身を直接記述した場合はどうなるのでしょう?

はい、これはですね、バッチリ問題なく普通にリンク先は開きますしブラウザのソースを開いても普通にURLだけ記述されています。

それと、include_onceでなくincludeだけにしたら、同じものを複数記述していたものが直りました!
ありがとうございました
投稿日時:2010/06/25 16:20
お礼コメント
touchy

お礼率 88% (704/796)

なんと、回答者様の環境では問題なくできるのですか!!・・・
いったいどうなってるんだろう・・・

> PHPの文法の問題じゃなくて、それ以外でURLが相対アドレスとして扱われる処理が働いているような気がします。

おっしゃるとおりでして、開いたWebページが
http://xn--u9jxf0b3dt27s.jp/syohin/
にあるページだとしますと、このURLまでが何故か先頭について、その間に%とかFとかBとかの文字列が9文字ほど続いて、そのあとにurl.phpに書いているURLが入っています。以下のような感じのリンクURLになってしまうということです。

http://xn--u9jxf0b3dt27s.jp/syohin/%FB%BB%EFhttp://xn--u9jxf0b3dt27s.jp

それとも、すでに外部ファイルであるfooter.phpにコレを記述して、そのまた外部ファイルがurl.phpなので、外部に外部となるのがいけないとでも言うのでしょうか??

ウ~ン・・・わからない・・・
投稿日時:2010/06/25 15:10

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 71% (149/209)

ANo2です。
申し訳ありませんでした

この動きを誤解されているようです。 >> 私自身

以下PHPマニュアルより抜粋
ファイルが読み込まれるときには、読み込まれるファイルの先頭で
PHPモードを抜けてHTMLモードになり、最後に再びPHPモードに戻ります。
このため、読み込むファイル中のPHPコードとして実行する必要がある
コードは、 有効なPHPの開始タグおよび終了タグで括る必要があります。
お礼コメント
touchy

お礼率 88% (704/796)

とんでもありません、ということは、HTMLモードとして読まれるということだと思うので、
もともとの状態で記述としては間違っていないということだと理解いたしました。
No3様が書いておられる、別の要因ということなのか?と現在調査中です。
もし要因わかりましたらアドバイスいただけますと助かります。
投稿日時:2010/06/25 14:52
  • 回答No.2

ベストアンサー率 71% (149/209)

<?php include_once("url.php"); ?>

この動きを誤解されているようです。
ここは、url.phpの内容を読み込んで、それを実行した結果が
出力されることになります。
url.phpの内容がそのまま出力されるわけでは有りません。

つまり
>> ●url.phpに書いた記述はサイトURLだけです。以下です。
>> http://xn--u9jxf0b3dt27s.jp

URLしか書いていないので、http://xn--u9jxf0b3dt27s.jp
読み込んで、それを実行した結果(当然エラーなのでエラー表示内容)が
出力されます。

よって、url.phpの内容を
echo 'http://xn--u9jxf0b3dt27s.jp';
に変更してみてください
お礼コメント
touchy

お礼率 88% (704/796)

ありがとうございます。
echo 'http://xn--u9jxf0b3dt27s.jp';

にしてみましたがダメでしてリンククリックしても長ったらしいURLが出てきてページは開きませんでした。
投稿日時:2010/06/25 14:54
  • 回答No.1

ベストアンサー率 74% (170/228)

>%EF%BB%BF
これってボムつきutf8のような気がする
そのurlファイルを何で作ったのかは知らないけれど、
url だけの記述ならASCII(または、latin1)保存して下さい。
お礼コメント
touchy

お礼率 88% (704/796)

ありがとうございます、おっしゃるとおりで、BOMなしでダメだったのでBOM付きでやってみたのを記載しておりました。
やはりBOM無しでやらないといけないようですね。ありがとうございます。
投稿日時:2010/06/25 14:39
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ