Question
Je sur un serveur avec de nombreux clients quand je développe mon init.php-je inclure dans lequel j'ai une fonction __autoloader()
qui inclut le fichier avec dir_name(__FILE__)."/classes/".$className
par exemple.
Mais j'ai vu hier que le serveur n'a pas pu trouver la classe spécifique, je restartat apache et cela a fonctionné à nouveau.
Chaque client a ce propre init.php ... (et donc beaucoup __autoloads sur le même serveur)
customer1/init.php : holds __autoload() customer1/classes/class.php customer2/init.php : holds __autoload() customer2/classes/class.php
Je ne l'ai pas fait quelques tests et j'espère que quelqu'un peut répondre à ma question avant d'essayer de reproduire le problème, mais pensez-vous qu'il est possible de php prendre la fonction de chargement automatique mal quand vous obtenez 2 ou plusieurs demandes en même temps?
est spl_autoload_register la solution?
Merci beaucoup pour quelques idées ou remue-méninges.
La solution
Je pense que vous devriez avoir une faute de frappe dans l'une de vos fonctions __autoload () ou vous incluez le fichier init.php mal.
En outre, dir_name () n'existe pas, vous devez changer cela dirname () au lieu ou vous pouvez également utiliser la nouvelle DIR constante pour le même effet si vous utilisez PHP> = 5.3.
EDIT: À la lumière de votre commentaire, l'utilisation doit utiliser:
require(realpath(dirname(__FILE__)) . '/classes/' . $className);
ou
require(realpath(__DIR__) . '/classes/' . $className);
Autres conseils
Chaque demande de PHP est complètement séparé, en fait, il est impossible pour vous d'avoir deux fonctions nommées __autoload()
dans la même requête PHP, ils ne peuvent pas interférer. Problèmes possibles:
- Vous incluez
init.php
du mauvais client - Vous avez oublié d'inclure le fichier
init.php
, auquel cas il est pas autoloading du tout.