Domanda
Ho un server con molti clienti, quando sviluppo includo il mio init.php in cui ho una funzione __autoloader()
che include il file con dir_name(__FILE__)."/classes/".$className
per esempio.
Ma ieri ho visto che il server non riusciva a trovare la classe specifica, ho restartat apache e poi ha funzionato di nuovo.
Ogni cliente ha questo proprio init.php ... (e quindi molti __autoloads sullo stesso server)
customer1/init.php : holds __autoload() customer1/classes/class.php customer2/init.php : holds __autoload() customer2/classes/class.php
Non ho fatto alcuni test e spero che qualcuno possa rispondere alla mia domanda prima di provare a riprodurre il problema, ma pensi che sia possibile per php a prendere la funzione di caricamento automatico sbagliato quando si ottiene 2 o più richieste allo stesso tempo?
E 'spl_autoload_register la soluzione?
Molte grazie per alcune idee o di brainstorming.
Soluzione
La mia ipotesi è che si dovrebbe avere un errore di battitura in uno dei tuo __autoload () funzioni o si include il file init.php sbagliata.
Inoltre, dir_name () non esiste, si dovrebbe cambiare la situazione a dirname () al posto o si può anche utilizzare il nuovo DIR costante per lo stesso effetto se si sta utilizzando PHP> = 5.3.
Modifica Alla luce del tuo commento, uso dovrebbe usare:
require(realpath(dirname(__FILE__)) . '/classes/' . $className);
o
require(realpath(__DIR__) . '/classes/' . $className);
Altri suggerimenti
Ogni richiesta PHP è completamente separato, in realtà è impossibile per voi di avere due funzioni denominate __autoload()
nella stessa richiesta di PHP, in modo che non può interferire. Possibili problemi:
- si includono del cliente sbagliato
init.php
- Hai dimenticato di includere il file
init.php
, nel qual caso non v'è non caricamento automatico a tutti.