1

__autoloader()私は多くの顧客がいるサーバーを持っています。開発するときに、たとえばファイルを含む関数がある init.php を含めdir_name(__FILE__)."/classes/".$classNameます。

しかし、昨日、サーバーが特定のクラスを見つけることができなかったことがわかりました.apacheで再起動すると、再び機能しました。

すべての顧客は、この独自の init.php を持っています... (したがって、同じサーバー上に多くの __autoloads があります)

customer1/init.php : __autoload() を保持
customer1/classes/class.php

customer2/init.php : __autoload() を保持
customer2/classes/class.php

私はいくつかのテストを行っていないので、問題を再現する前に誰かが私の質問に答えてくれることを願っていますが、同時に 2 つ以上のリクエストを受け取ったときに、php が間違ったオートロード機能を実行する可能性があると思いますか?

spl_autoload_register は解決策ですか?

いくつかのアイデアやブレインストーミングに感謝します。

4

2 に答える 2

2

私の推測では、__autoload() 関数のいずれかにタイプミスがあるか、間違った init.php ファイルが含まれているはずです。

また、dir_name() は存在しません。代わりにdirname () に変更する必要があります。または、PHP >= 5.3 を使用している場合は、同じ効果のために新しいDIR定数を使用することもできます。

編集:あなたのコメントに照らして、使用する必要があります:

require(realpath(dirname(__FILE__)) . '/classes/' . $className);

また

require(realpath(__DIR__) . '/classes/' . $className);
于 2009-08-13T08:41:28.090 に答える
0

各 PHP リクエストは完全に分離されています。実際、同じ PHP リクエストで 2 つの関数を指定することは不可能である__autoload()ため、それらが干渉することはありません。考えられる問題:

  • 間違った顧客を含めていますinit.php
  • ファイルを含めるのを忘れました。init.phpこの場合、オートロードはまったく行われません。
于 2009-08-13T08:48:54.067 に答える