Cos'è mod_php?


108

Durante un tutorial Zend , mi sono imbattuto nella seguente affermazione:

Nota che le impostazioni di php_flag in .htaccess funzionano solo se stai usando mod_php.

Qualcuno può spiegare cosa significa?

Risposte:


158

mod_phpsignifica PHP, come un modulo Apache .

Fondamentalmente, quando si carica mod_phpcome modulo Apache, consente ad Apache di interpretare i file PHP (quelli sono interpretati da mod_php) .


EDIT: Ci sono (almeno) due modi per eseguire PHP, quando si lavora con Apache:

  • Utilizzo di CGI : un processo PHP viene avviato da Apache ed è quel processo PHP che interpreta il codice PHP, non Apache stesso
  • Utilizzo di PHP come modulo Apache (chiamato mod_php) : l'interprete PHP viene quindi "incorporato" nel processo Apache: non esiste un processo PHP esterno, il che significa che Apache e PHP possono comunicare meglio.


E ri-modifica, dopo il commento : usando CGI o mod_phpdipende da te: è solo questione di configurazione del tuo server web.

Per sapere in che modo è attualmente utilizzato sul tuo server, puoi controllare l'output di phpinfo(): dovrebbe esserci qualcosa che indica se PHP è in esecuzione tramite mod_php (o mod_php5) o tramite CGI.

Potresti anche dare un'occhiata alla php_sapi_name()funzione: restituisce il tipo di interfaccia tra server web e PHP .


Se controlli i file di configurazione di Apache, quando lo usi mod_php, dovrebbe esserci una LoadModuleriga simile a questa:

LoadModule php5_module        modules/libphp5.so

(Il nome del file, a destra, può essere diverso: su Windows, ad esempio, dovrebbe essere a .dll)


Ho usato xampp per installare i pacchetti php, apache e mysql ... Allora, quale sarà la mia configurazione?
SpikETidE

Dovresti abilitarlo se PHP non funziona attualmente. Se PHP sta già funzionando, deve utilizzare CGI, nel qual caso probabilmente dovrai fare di più che abilitare il modulo. Il modulo potrebbe anche non esistere nel sistema.
d11wtq

1
Sì..!. Quando eseguo phpinfo () vedo che mod_php5 è incluso nella sezione Moduli caricati .... E questo significa che ho funzionato come modulo Apache ... giusto?
SpikETidE

3
mod_phpè di gran lunga la configurazione più comune.
troelskn

@Pascal, direi che mod_phpnon è vero PHP; è solo un componente aggiuntivo di Apache. O meglio, penso che dovresti iniziare la risposta con una definizione di cosa significa esattamente PHP?
Pacerier

58

Questa risposta è presa da TuxRadar :

Quando si esegue PHP tramite il server Web, sono disponibili due opzioni distinte: eseguirlo utilizzando CGI SAPI di PHP o eseguirlo come modulo per il server Web. Ognuno ha i propri vantaggi, ma, nel complesso, il modulo è generalmente preferito.

Eseguire PHP come CGI significa che in pratica comunichi al tuo server web la posizione del file eseguibile PHP, e il server esegue quell'eseguibile, dandogli lo script che hai chiamato, ogni volta che visiti una pagina. Ciò significa che ogni volta che carichi una pagina, PHP deve leggere php.ini e impostare le sue impostazioni, deve caricare tutte le sue estensioni e quindi deve iniziare a lavorare per analizzare lo script: c'è molto lavoro ripetuto.

Quando esegui PHP come modulo, PHP si trova letteralmente all'interno del tuo server web: si avvia solo una volta, carica le sue impostazioni e le estensioni solo una volta e può anche memorizzare informazioni tra le sessioni. Ad esempio, gli acceleratori PHP si basano sul fatto che PHP sia in grado di salvare i dati memorizzati nella cache tra le richieste, cosa impossibile utilizzando la versione CGI.

L'ovvio vantaggio di usare PHP come modulo è la velocità: vedrai un grande aumento della velocità se converti da CGI a un modulo. Molte persone, in particolare gli utenti Windows, non se ne rendono conto e continuano a utilizzare php.exe CGI SAPI, il che è un peccato: il modulo è solitamente da tre a cinque volte più veloce.

C'è un vantaggio chiave nell'usare la versione CGI, però, ed è che PHP legge le sue impostazioni ogni volta che carichi una pagina. Con PHP in esecuzione come modulo, qualsiasi modifica apportata al file php.ini non viene avviata fino a quando non si riavvia il server Web, il che rende la versione CGI preferibile se si stanno testando molte nuove impostazioni e si desidera vedere risposte immediate.


@JohannEchavarria, a meno che tu non abbia aggiunto molte cose folli, il riavvio del server richiederà solo pochi secondi. Per i sistemi moderni "normali" con SSD è inferiore a 2 secondi.
Pacerier

12

Il tuo server deve avere i moduli php installati in modo che possa analizzare il codice php.

Se sei su Ubuntu puoi farlo facilmente con

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Altrimenti puoi compilare apache con php: http://dan.drydog.com/apache2php.html

Specificare il sistema operativo del server aiuterà gli altri a rispondere in modo più specifico.


5

Significa che devi avere PHP installato come modulo in Apache, invece di avviarlo come script CGI.


3

Solo per aggiungere queste risposte è che, mod_php è il metodo più vecchio e più lento disponibile nel server HTTPD per utilizzare PHP. Non è consigliato, a meno che tu non stia eseguendo vecchie versioni di Apache HTTPD e PHP. php-fpm e proxy_cgi sono i metodi preferiti.


0

mod_php è un interprete PHP.

Dai documenti, un'importante cattura di mod_php è,

"mod_php non è thread-safe e ti costringe a restare con prefork mpm (multi processo, nessun thread), che è la configurazione più lenta possibile"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.