Come faccio a dire ad Apache quale PHP usare?


34

Sto eseguendo Apache2 su un Mac OS X (10.5) . Ho appena compilato PHP 5.2.8 e finalmente ho pdo-mysqlfunzionato (o almeno credo).

Questo comando terminale:

php --version

mostra 5.2.8 e ho installato i moduli giusti.

Ma, quando faccio un phpinfo(), Apache scarica PHP 5.2.6 (la mia versione precedente, senza pdo_mysql).

Come faccio a dire ad Apache quale PHP caricare? L' httpd.confha la linea:

LoadModule php5_module        libexec/apache2/libphp5.so

Ma non so cosa o dove sia.

È quello che devo cambiare?


Quando hai compilato php hai usato make install? Se hai trovato il percorso in cui ha installato il tuo modulo e hai cambiato la configurazione di apache per puntarlo. Il Mac ha la sua versione di apache e php5 già installata ed è per questo che stai vedendo una versione diversa.
Ruggs,


Utenti homebrew, vedere il commento di @Mick
BatteryAcid

1
Hai risolto il tuo problema? TUTTE le risposte sono solo una cosa folle
Pmpr

Nessuna di queste risposte risponde alla domanda. Questo è bizzarro ...
quant

Risposte:


14

Penso che tutte queste risposte non stiano davvero rispondendo alla domanda. Il livello di root può essere determinato eseguendo il comando httpd -V. Questo ti mostrerà con quali opzioni è stato creato il demone Apache in fase di compilazione. Questo è ciò che controlla dove httpddetermina dove cercare la sua configurazione. file e moduli .so per impostazione predefinita.

Per esempio:

% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

La linea chiave in quell'output è il HTTPD_ROOT. Ciò definisce dove ROOTdeve iniziare la directory di Apache , /etc/httpdnel mio caso, quando si cerca config. file e moduli.

NOTA: questa ROOTnon è la stessa cosa di DocumentRoot. Questo ROOTè specifico per come è httpdstato compilato il demone, DocumentRootserve per specificare dove il httpddemone dovrebbe iniziare a cercare il contenuto web effettivo (file .html e simili).

Per il mio httpd.conffile ho le seguenti righe di caricamento:

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so

Detto questo, il percorso completo dei moduli sarebbe, ad esempio:

/etc/httpd/modules/mod_auth_basic.so

Questo proviene da un sistema CentOS 5.x ma la tecnica è ancora adatta.

A proposito, può diventare un po 'confuso perché nel caso di CentOS i file sono organizzati fisicamente qui:

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so

... e quindi accessibile al demone Apache httpd, attraverso questo percorso:

% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26  2011 conf
drwxr-xr-x 3 root root 4096 Apr 26  2011 conf.d
-rw-r--r-- 1 root root   18 Feb 24  2009 htpasswd
lrwxrwxrwx 1 root root   19 Apr 26  2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   27 Apr 26  2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root   13 Apr 26  2011 run -> ../../var/run

Il modulescollegamento collega /etc/httpd-> /usr/lib/httpd/modules.


slm come ho affermato nel precedente post, ServerRoot è definito nella direttiva ServerRoot e non ha nulla a che fare con HTTPD_ROOT che viene visualizzato tramite "httpd -V". Si prega di consultare le pagine Web di Apache a cui si fa riferimento nel mio post precedente o se si desidera modificare la direttiva ServerRoot nelfile httpd.conf e vedere di persona.
Billynoah,

ServerRoot è un modo per sovrascrivere HTTPD_ROOT. HTTPD_ROOT è impostato al momento della compilazione tramite l'opzione di configurazione --prefix. Il tuo post distingueva i diversi ServerRoot e DocumentRoot in b / n. httpd.apache.org/docs/current/mod/core.html#serverroot . È bello vedere che hai registrato un nome con il tuo account SF!
slm

Questo risponde davvero alla domanda: "Come faccio ad indicare ad Apache quale PHP usare?" ?
Pmpr

Trix l'OP l'ha accettato, quindi sì.
slm

@slm Questo non risponde alla domanda.
quant

4

Puoi trovare file sul tuo sistema con il locatecomando:

# individuare libphp5.so

Stampa tutti i percorsi di tutti i file con quel nome. Ne ho uno a /usr/libexec/apache2/libphp5.so.


1
E allora? è una risposta alla domanda? O un modo per trovare un file?
Pmpr

1
@Trix, il richiedente, "Non so cosa o dove sia". Ho mostrato come trovare dove si trova. Supponevo che una volta che il richiedente avesse visto tutte le altre posizioni del file nominato in questione, sarebbe evidente come modificare l'impostazione per usarne una diversa.
Rob Kennedy,

4

La directory padre dei moduli caricati in httpd.conf (come:) libexec/apache2/libphp5.soè definita dalla ServerRootdirettiva che di default è normalmente impostata su /usr. Non consiglierei di cambiarlo, ma potrebbe essere utile che qualcuno sappia esattamente dove è definito quel percorso.

Il sito Web di Apache dice quanto segue su ServerRoot :

I percorsi relativi in ​​altre direttive di configurazione (come Includi o LoadModule, ad esempio) sono considerati relativi a questa directory.

inoltre i commenti sul file httpd.conf predefinito sono:

ServerRoot: la parte superiore della struttura di directory in cui vengono conservati i file di configurazione, errore e registro del server.


2
L'OP non segue una definizione di ServerRoot. Invece ha fatto la domanda "Come faccio a dire ad Apache quale PHP usare?". Se vuoi davvero rispondere, rispondi quindi
Pmpr

3

Apache dovrebbe cercare i moduli in "/ usr / libexec / httpd /". Lì troverai un file o un link simbolico chiamato "libphp5.so". Se si tratta di un collegamento simbolico, dovrai ricollegarti al nuovo libphp5.so 5.2.8, altrimenti copia semplicemente il libphp5.so 5.2.8 in "/ usr / libexec / httpd /" e riavvia apache con "riavvio di sudo apachectl" .


0

Avevo installato Apache e PHP su uno dei server. Questo è stato installato dall'amministratore di sistema precedente. Sia Apache che PHP sono stati rispettati dalla fonte. Inoltre, era installato un PHP predefinito. Quindi, per sapere quale PHP viene utilizzato da Apache. Eseguo il comando seguente

   <Install Dir of PHP>/bin/php -i | grep apxs

Questo mi ha dato il percorso per apache apache

  APACHE_HOME/bin/apxs

Questo mi ha dato informazioni su quale Apache viene utilizzato da questo php. Il php predefinito ha dato errore quando ho digitato

#php -i | grep apxs 

 Failed loading opcache.so:  opcache.so: cannot open shared object file: No    such file or directory PHP Warning:  PHP Startup: Unable to load dynamic library     '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0

In questo modo sono stato in grado di capire il php utilizzato da Apache.


1
Per favore, non pubblicare la stessa risposta due volte. Invece, collega alla prima risposta.
Sven
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.