2010-10-17 25 views
46

Ho cercato di capire il significato esatto/scopo del caricamento di PHP come un modulo apache rispetto al resto.mod_php vs cgi vs fast-cgi

Quando php è installato come modulo apache, cosa succede esattamente? Ad esempio, la lettura del file php-ini si verifica ogni volta che viene ricevuta la richiesta php o quando il modulo php viene caricato da solo?

risposta

22

php.ini viene letto quando il modulo PHP viene caricato in mod_php, FastCGI e FPM. In modalità CGI normale, il file di configurazione deve essere letto in fase di esecuzione perché non ci sono processi di prefork di alcun tipo.

Penso che l'unico vero vantaggio di eseguire PHP come modulo all'interno del server Web sia che la configurazione potrebbe essere più semplice. Otterrai prestazioni molto migliori quando lo esegui in modalità FastCGI o FPM e puoi utilizzare Apache in modalità threaded o evented (invece che forked) o quando puoi eliminare Apache del tutto.

+0

Quindi, per essere più specifico, dire se ho una variabile che potrebbe essere utilizzata da tutte le richieste. In altre parole, supponiamo di dover fare l'interprete php per cercare i file relativi al percorso di mantenimento (/ home/utente/documenti). Potrò memorizzare/home/utente/documenti in una configurazione e caricarlo una volta in una variabile globale? In questo modo se l'utente emette file_get_contents ("new.txt"), viene tradotto in file_get_contents ("/ home/utente/documenti/nuovo.txt") –

+0

Controlla l'impostazione PHP auto_prepend_file, che ti darà l'opportunità di anteporre PHP codice da eseguire prima di analizzare la richiesta effettiva. all'interno del tuo file auto_prepended, usa chdir() per cambiare directory. Nota comunque che questo intercetterà TUTTE le operazioni sui file, anche include() e require()! –

+1

@ Karthick: Perché l'interprete PHP dovrebbe memorizzare tali informazioni? Quel genere di informazioni è per il tuo codice di cui preoccuparsi. Quando non si assegna un percorso assoluto a un file, sembra relativo allo script che viene eseguito dall'interprete PHP. E no, diverse istanze di interprete PHP non possono e non devono condividere dati tra loro. – Anand

2

php.ini viene letto quando il modulo viene caricato nel caso di un modulo Apache. PHP CGI usa un interprete php eseguibile come farebbe qualsiasi altro script di shell. Dato che non c'è stato coinvolto in ogni invocazione, il file di configurazione dovrebbe essere letto ogni volta in caso di CGI.

+0

Si prega di leggere il commento che ho appena inviato all'altra risposta. Vedi se potessi averlo! –

Problemi correlati