0

私は最近、php コードでクラスを自動ロードするために次のコードを実装しました。

function my_autoloader($class) {
    include 'classes/class_' . $class . '.php';
}
spl_autoload_register('my_autoloader');

コードは、Web ページを生成する必要があるすべてのファイルの先頭に含まれるファイルに含まれています。そこで、コードから require_once 呼び出しを削除することにしました。次に例を示します。

require_once('classes/class_web_page.php');

おそらく上記からわかるように、私のサイトのさまざまなページ (オンライン コミュニティなので、フォーラム、ギャラリーなどがあります) はすべて web_page クラスを使用して、ページの見出しやメニューなどを生成します。コードのさまざまな部分が作成されます。 web_page オブジェクト、さまざまなパラメーターを設定して、必要なメニュー オプションなどを決定し、ページにコンテンツを与え、html を生成します。

class_web_page.php ファイルに変更を加えるまでは、すべて問題ないように見えました。変更はほとんどのサイトですぐに明らかになりました...ホームページを除く.

私はブラウザを更新し、オフの場合は再度オンに切り替えました:-) http://www.terragenesis.co.uk/ではなくhttp://www.terragenesis.co.uk/index.phpを呼び出してみましたが、停止しましたサーバーでApacheを再起動しました。このすべてにもかかわらず、変更はホームページに表示されませんでした。最後に、require_once の行を index.php に戻しました... すると、class_web_page.php で行った変更がホームページに表示されました。

そのため、オートローダーはキャッシュされた class_web_page.php のコピーをロードしているように見えますが、Apache を再起動しても、新しいバージョンを取得するよう説得することはできませんでした。他のページではなく、ホームページに対してこれを行う必要があるのはなぜですか...私にはわかりません。

他の誰かがこれを経験しましたか?オートローダのコードに何か問題がありましたか? どうすれば修正できますか...または、すべてのrequire_onceステートメントを元に戻す必要がありますか? :-(

私のサーバーには PHP バージョン 5.1.6 があります

4

2 に答える 2

1

私はこれに対する答えを見つけました...そしていつものように、何日も私を逃れる「バグ」で、私は信じられないほど愚かなことをしたことがわかりました:

過去のある時点で、誤って class_web_page.php のコピーを、classes サブディレクトリではなく、サイトのホーム ディレクトリにアップロードしたことが判明しました。したがって、それは2回存在しました。

したがって、オートローダーが php に classes サブディレクトリを調べるように指示しているにもかかわらず、最初にメイン スクリプト (私のサイトのホームページの場合は index.php) と同じディレクトリを調べるように見えます。他のすべてのサイト ページ スクリプトはサブディレクトリ (フォーラム、ギャラリーなど) にあるため、/classes/class_web_page.php を「正しく」使用していました。

ホームディレクトリにあったclass_web_page.phpのコピーを削除しました...そしてすべてが正常に機能します。

于 2013-01-29T11:25:55.387 に答える
0

このファイルが実際にロードされている (またはキャッシュされたバージョンである) ことは確かですか?

于 2013-01-23T16:48:27.583 に答える