PHPでrequire読込みを行う場合の質問です。

requireで読込むようにした場合、読込んだ部分のテーブル構成(html)が崩れたり、require行以前に値がセットされているはずの変数が表示されないといったことが過去に何度かありました。
その原因は解決しないまま、仕方なくrequireを使用しないやり方に変えて、その場を凌いできましたが、今回いろいろ試してみました。

そして気づいたのですが(根本原因とは関係ない、副次的な部分ですが)、読込まれる側のソースを変更して、ブラウザ更新後、「表示→ソース」をみると、変更前のコードのままでした。これに対し読み込み側のコードは変更するとすぐに画面に反映されます。
eclipseを使っており、「リフレッシュ」などを行っても、改善しません。
このようなことがおこる原因は何が考えられますか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/11 17:36:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:kon39392

ちなみにこれに気付いたきっかけは、テスト環境で動作していたものを本番環境で動かしてみたときに、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。

この違いがどこで生じるかについても何かわかりましたらお願いします。

ベストアンサー

id:taroe No.3

回答回数1099ベストアンサー獲得回数132

ポイント33pt

PHPソース
・PHPのコードをキャッシュして高速化するようなツールを使用している
・Apacheなどのサーバー側でキャッシュする仕組みを利用している
・ブラウザのキャッシュが存在する
ブラウザ

PHPソースから、ブラウザまでくる間に、どこかでキャッシュ機構が有効で
完全にクリアされないから反映されないだけだと思います。

ブラウザでキャッシュクリアしても、Apacheなどのキャッシュ機構が働いているとダメな場合があります。サーバー側も再起動するなりすれば、反映されると思います。

> eclipseを使っており、「リフレッシュ」などを行っても、改善しません
サーバー側もリフレッシュ動作をしてるのなら、改善するはずです。

>、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。

PHPの内部の変数の話なのか
PHPが出力されたHTMLソースについて話してるのか
ごちゃ混ぜになってる感じで、

もう少し整理しないと、原因の特定はできないと思いますよ。


>require行以前に値がセットされているはずの変数が表示されないと

明示的に変数をグローバル変数などしないとダメな場合もあります。

http://php.net/manual/ja/language.variables.scope.php

変数のスコープの問題ですね。

requireといっても
単にテキストでソースをマージしてるのと同じですよ。

その他の回答2件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント34pt

ctrl+f5でスーパーリロードを行なっても更新されませんか?
metaタグでキャッシュを作らない属性を加えるとか

id:tobeoscontinue No.2

回答回数220ベストアンサー獲得回数59

ポイント33pt

http://php.net/manual/ja/function.include.php
requireで指定するファイルが絶対パス、カレントディレクトリからの相対パス以外では
include_pathを使って検索されます。そのため意図しないファイルがrequireされているのでは
無いでしょうか。

requireは実行のたびに評価されるので副作用が出ているのでは無いでしょうか。一度で十分ならrequire_onceの方がいいでしょう。

ありがちなのはファイルの先頭や末尾に空白文字が入っていてwarnningが出るというのがあります。

id:taroe No.3

回答回数1099ベストアンサー獲得回数132ここでベストアンサー

ポイント33pt

PHPソース
・PHPのコードをキャッシュして高速化するようなツールを使用している
・Apacheなどのサーバー側でキャッシュする仕組みを利用している
・ブラウザのキャッシュが存在する
ブラウザ

PHPソースから、ブラウザまでくる間に、どこかでキャッシュ機構が有効で
完全にクリアされないから反映されないだけだと思います。

ブラウザでキャッシュクリアしても、Apacheなどのキャッシュ機構が働いているとダメな場合があります。サーバー側も再起動するなりすれば、反映されると思います。

> eclipseを使っており、「リフレッシュ」などを行っても、改善しません
サーバー側もリフレッシュ動作をしてるのなら、改善するはずです。

>、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。

PHPの内部の変数の話なのか
PHPが出力されたHTMLソースについて話してるのか
ごちゃ混ぜになってる感じで、

もう少し整理しないと、原因の特定はできないと思いますよ。


>require行以前に値がセットされているはずの変数が表示されないと

明示的に変数をグローバル変数などしないとダメな場合もあります。

http://php.net/manual/ja/language.variables.scope.php

変数のスコープの問題ですね。

requireといっても
単にテキストでソースをマージしてるのと同じですよ。

id:kon39392

ありがとうございました。

どれも大変参考になりました。

相変わらず根本原因を突き止められていませんが、取り急ぎ下記で凌ぎました。

・eclipse使用をやめて、テキストエディタを使用

 ⇒すぐに反映されるようになりました。

・requireで呼び出すファイル内の変数はではなくとしました。

 ⇒値がきちんと表示されました。

またじっくり調べてみます。

ご回答ありがとうございました。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません