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.

Était-ce utile?

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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top