1 votes

__autoload mix up ?

J'ai un serveur sur lequel se trouvent de nombreux clients, lorsque je développe, j'inclus mon init.php dans lequel j'ai un fichier __autoloader() qui inclut le fichier avec dir_name(__FILE__)."/classes/".$className par exemple.

Mais hier, j'ai vu que le serveur ne pouvait pas trouver la classe spécifique, j'ai redémarré apache et cela a fonctionné à nouveau.

Chaque client a son propre init.php... (et donc plusieurs __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 n'ai pas fait de tests et j'espère que quelqu'un pourra répondre à ma question avant que j'essaie de reproduire le problème, mais pensez-vous qu'il est possible que php prenne la mauvaise fonction d'autoload lorsque vous recevez 2 ou plusieurs requêtes en même temps ?

Est-ce que spl_autoload_register est la solution ?

Merci beaucoup pour les idées ou le brainstorming.

2voto

Alix Axel Points 63455

Je pense que vous avez une faute de frappe dans l'une de vos fonctions __autoload() ou que vous avez inclus le mauvais fichier init.php.

De plus, dir_name() n'existe pas, vous devriez le changer en nom de répertoire () à la place ou vous pouvez également utiliser la nouvelle fonction DIR constant pour le même effet si vous utilisez PHP >= 5.3.

EDITAR: À la lumière de votre commentaire, il faut utiliser :

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

ou

require(realpath(__DIR__) . '/classes/' . $className);

0voto

too much php Points 27983

Chaque requête PHP est complètement séparée, en fait il est impossible pour vous d'avoir deux fonctions nommées __autoload() dans la même requête PHP, afin qu'ils ne puissent pas interférer. Problèmes possibles :

  • Vous incluez le mauvais client init.php
  • Vous avez oublié d'inclure le init.php dans ce cas, il y a pas de autoloading du tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X