requireで読込むようにした場合、読込んだ部分のテーブル構成(html)が崩れたり、require行以前に値がセットされているはずの変数が表示されないといったことが過去に何度かありました。
その原因は解決しないまま、仕方なくrequireを使用しないやり方に変えて、その場を凌いできましたが、今回いろいろ試してみました。
そして気づいたのですが(根本原因とは関係ない、副次的な部分ですが)、読込まれる側のソースを変更して、ブラウザ更新後、「表示→ソース」をみると、変更前のコードのままでした。これに対し読み込み側のコードは変更するとすぐに画面に反映されます。
eclipseを使っており、「リフレッシュ」などを行っても、改善しません。
このようなことがおこる原因は何が考えられますか?
ちなみにこれに気付いたきっかけは、テスト環境で動作していたものを本番環境で動かしてみたときに、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。
この違いがどこで生じるかについても何かわかりましたらお願いします。
PHPソース
・PHPのコードをキャッシュして高速化するようなツールを使用している
・Apacheなどのサーバー側でキャッシュする仕組みを利用している
・ブラウザのキャッシュが存在する
ブラウザ
PHPソースから、ブラウザまでくる間に、どこかでキャッシュ機構が有効で
完全にクリアされないから反映されないだけだと思います。
ブラウザでキャッシュクリアしても、Apacheなどのキャッシュ機構が働いているとダメな場合があります。サーバー側も再起動するなりすれば、反映されると思います。
> eclipseを使っており、「リフレッシュ」などを行っても、改善しません
サーバー側もリフレッシュ動作をしてるのなら、改善するはずです。
>、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。
PHPの内部の変数の話なのか
PHPが出力されたHTMLソースについて話してるのか
ごちゃ混ぜになってる感じで、
もう少し整理しないと、原因の特定はできないと思いますよ。
>require行以前に値がセットされているはずの変数が表示されないと
明示的に変数をグローバル変数などしないとダメな場合もあります。
http://php.net/manual/ja/language.variables.scope.php
変数のスコープの問題ですね。
requireといっても
単にテキストでソースをマージしてるのと同じですよ。
http://php.net/manual/ja/function.include.php
requireで指定するファイルが絶対パス、カレントディレクトリからの相対パス以外では
include_pathを使って検索されます。そのため意図しないファイルがrequireされているのでは
無いでしょうか。
requireは実行のたびに評価されるので副作用が出ているのでは無いでしょうか。一度で十分ならrequire_onceの方がいいでしょう。
ありがちなのはファイルの先頭や末尾に空白文字が入っていてwarnningが出るというのがあります。
PHPソース
・PHPのコードをキャッシュして高速化するようなツールを使用している
・Apacheなどのサーバー側でキャッシュする仕組みを利用している
・ブラウザのキャッシュが存在する
ブラウザ
PHPソースから、ブラウザまでくる間に、どこかでキャッシュ機構が有効で
完全にクリアされないから反映されないだけだと思います。
ブラウザでキャッシュクリアしても、Apacheなどのキャッシュ機構が働いているとダメな場合があります。サーバー側も再起動するなりすれば、反映されると思います。
> eclipseを使っており、「リフレッシュ」などを行っても、改善しません
サーバー側もリフレッシュ動作をしてるのなら、改善するはずです。
>、require("getData.php");という記述で読み込めなくなったことがきっかけです。ドキュメントルート指定の記述に変更して読み込めるようになったものの、上述したように値がセットされないなどの現象に出くわしました。
PHPの内部の変数の話なのか
PHPが出力されたHTMLソースについて話してるのか
ごちゃ混ぜになってる感じで、
もう少し整理しないと、原因の特定はできないと思いますよ。
>require行以前に値がセットされているはずの変数が表示されないと
明示的に変数をグローバル変数などしないとダメな場合もあります。
http://php.net/manual/ja/language.variables.scope.php
変数のスコープの問題ですね。
requireといっても
単にテキストでソースをマージしてるのと同じですよ。
コメント(0件)