• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのinclude_onceで外部ファイル化したサイトURLがリン)

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

このQ&Aのポイント
  • PHPのinclude_onceを使用して外部ファイル化したサイトURLがリンクできない問題が発生しています。
  • サイトURLをurl.phpという外部ファイルにまとめて記述し、使い回しすることで管理を楽にしていますが、リンクをクリックするとページが存在しないという問題が発生しています。
  • 相対パスの解釈がおかしくなり、hrefタグの記述が正しくないため、リンク先が正しく表示されません。どのように修正すればよいでしょうか?

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

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

 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
質問者

お礼

なんと、回答者様の環境では問題なくできるのですか!!・・・ いったいどうなってるんだろう・・・ > 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なので、外部に外部となるのがいけないとでも言うのでしょうか?? ウ~ン・・・わからない・・・

touchy
質問者

補足

言い忘れていましたので補足欄で。 > ところで、ここをinclude_onceせずに、url.phpの中身を直接記述した場合はどうなるのでしょう? はい、これはですね、バッチリ問題なく普通にリンク先は開きますしブラウザのソースを開いても普通にURLだけ記述されています。 それと、include_onceでなくincludeだけにしたら、同じものを複数記述していたものが直りました! ありがとうございました

その他の回答 (3)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.4

ANo2です。 申し訳ありませんでした この動きを誤解されているようです。 >> 私自身 以下PHPマニュアルより抜粋 ファイルが読み込まれるときには、読み込まれるファイルの先頭で PHPモードを抜けてHTMLモードになり、最後に再びPHPモードに戻ります。 このため、読み込むファイル中のPHPコードとして実行する必要がある コードは、 有効なPHPの開始タグおよび終了タグで括る必要があります。

touchy
質問者

お礼

とんでもありません、ということは、HTMLモードとして読まれるということだと思うので、 もともとの状態で記述としては間違っていないということだと理解いたしました。 No3様が書いておられる、別の要因ということなのか?と現在調査中です。 もし要因わかりましたらアドバイスいただけますと助かります。

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

<?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
質問者

お礼

ありがとうございます。 echo 'http://xn--u9jxf0b3dt27s.jp'; にしてみましたがダメでしてリンククリックしても長ったらしいURLが出てきてページは開きませんでした。

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

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

touchy
質問者

お礼

ありがとうございます、おっしゃるとおりで、BOMなしでダメだったのでBOM付きでやってみたのを記載しておりました。 やはりBOM無しでやらないといけないようですね。ありがとうございます。