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.

È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top