Frage
Ich habe einen Server mit vielen Kunden auf, wenn ich entwickle ich meine init.php enthalten, in dem ich eine __autoloader()
Funktion habe, das die Datei mit dir_name(__FILE__)."/classes/".$className
zum Beispiel enthält.
Aber gestern sah ich, dass der Server nicht die spezifische Klasse finden konnte, restartat ich Apache und dann wieder es hat funktioniert.
Jeder Kunde hat diese eigenen init.php ... (und damit viele __autoloads auf demselben Server)
customer1/init.php : holds __autoload() customer1/classes/class.php customer2/init.php : holds __autoload() customer2/classes/class.php
Ich habe nicht ein paar Tests gemacht und ich hoffe, dass jemand meine Frage beantworten kann, bevor ich versuche, das Problem zu reproduzieren, aber denken Sie, es möglich ist, für PHP die falsche Autoload-Funktion zu nehmen, wenn Sie erhalten 2 oder mehr Anfragen zum gleichen Zeit?
Ist spl_autoload_register die Lösung?
Vielen Dank für einige Ideen oder Brainstorming.
Lösung
Meine Vermutung ist, dass Sie einen Tippfehler haben sollten entweder in einen Ihres __autoload () Funktionen oder Sie mit der falschen init.php Datei.
Auch dir_name () nicht vorhanden ist, sollten Sie das ändern dirname () statt, oder Sie können auch den neuen dIR konstante für den gleichen Effekt, wenn Sie PHP verwenden> = 5,3.
EDIT: In Anbetracht Ihres Kommentars sollte Gebrauch verwenden:
require(realpath(dirname(__FILE__)) . '/classes/' . $className);
oder
require(realpath(__DIR__) . '/classes/' . $className);
Andere Tipps
Jede PHP Anfrage ist völlig unabhängig, in der Tat ist es unmöglich für Sie zwei Funktionen haben in dem gleichen PHP Antrag genannt __autoload()
, so dass sie nicht stören. Mögliche Probleme:
- Sie sind einschließlich der falschen Kunden
init.php
- Sie haben vergessen, die
init.php
Datei enthalten sein, in diesem Fall gibt es nicht autoloading überhaupt.