Sto costruendo un framework in cui le istanze del prodotto utilizzano i file framework principali, fino a quando non c'è una copia della propria versione di quel file. Per raggiungere questo obiettivo ho fatto quanto segue:PHP include l'ordine del percorso e la cache di stato
set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/');
Quindi, se io chiamo include('view-users.php');
cercherà prima in MY_PRODUCT_ROOT per /view-users.php e se questo non è trovato, sarà quindi cercare di MY_FRAMEWORK_ROOT/vista-utenti .php.
Questa procedura sta funzionando molto bene fino a quando non aggiungo i file alla radice del prodotto. So che PHP/Apache sta memorizzando nella cache gli include e si potrebbe pensare di eseguire clearstatcache(true);
per cancellare qualsiasi stato di memorizzazione nella cache. PHP probabilmente usa file_exists all'interno di include(); e pensa che il nuovo file non esiste ancora. Ho provato a riavviare Apache senza alcun effetto.
Purtroppo l'esecuzione di clearstatcache(true);
non aiuta neanche. Solo una volta che ho eliminato MY_FRAMEWORK_ROOT/file pensa di svuotare la cache e riprovare, trovando così MY_PRODUCT_ROOT/file.
Im un po 'perplesso, so che abbiamo bisogno di aggiornare la comprensione PHP/Apache se il file (s) esiste o no, ma clearstatcache(true);
non aiuta ...
Tutte le idee?
UPDATE: Correzione, il riavvio di Apache sembra essere d'aiuto. Ribadisco che questo si verifica solo quando si cerca di aggiungere un file a MY_PRODUCT_ROOT, sovrapporre un file MY_FRAMEWORK_ROOT esistente, per la personalizzazione
UPDATE: ambiente di sviluppo è Zend Server CE PHP 5.3.14 su Windows, l'ambiente di produzione CentOS httpd , PHP 5.3+. Il fatto che Zend Optimizer sia abilitato sul mio ambiente dev potrebbe avere un effetto, Inoltre non usare APC o altri script di cache
Per essere più precisi, il riavvio di apache funziona solo durante la chiamata clearstatcache. Devo effettivamente cancellare il file framework, quindi ricaricare la pagina e rimettere il file framework – Prof83
hai abilitato la cache di apc? (o un'altra cache di optcode) –
Non è stato possibile riprodurre il problema su php-5.3.3 e apache 2.2.16. Potresti specificare più informazioni sul tuo ambiente? – Lars