¿Cómo le digo a Apache qué PHP usar?

34

Estoy ejecutando Apache2 en un Mac OS X (10.5) . Acabo de compilar PHP 5.2.8 y finalmente me puse a pdo-mysqltrabajar (o eso creo).

Este comando de terminal:

php --version

muestra 5.2.8 y tengo los módulos correctos instalados.

Pero, cuando hago un phpinfo(), Apache descarga PHP 5.2.6 (mi versión anterior, sin pdo_mysql).

¿Cómo le digo a Apache qué PHP cargar? El httpd.conftiene la línea:

LoadModule php5_module        libexec/apache2/libphp5.so

Pero, no sé qué o dónde está eso.

¿Es eso lo que tengo que cambiar?

Sam McAfee
fuente
Cuando compiló php, ¿usó make install? Si encontró la ruta en la que instaló su módulo y cambió su configuración de apache para apuntarlo. Mac ya tiene instalada su propia versión de apache y php5, por lo que está viendo una versión diferente.
Ruggs
Usuarios de Homebrew, ver comentario de
@Mick
1
¿Resolviste tu problema? TODAS las respuestas son una locura
Pmpr
Ninguna de estas respuestas responde a la pregunta. Esto es extraño ...
cuant

Respuestas:

14

Creo que todas estas respuestas no responden realmente la pregunta. El nivel raíz se puede determinar ejecutando el comando httpd -V. Esto le mostrará con qué opciones se construyó el demonio Apache en tiempo de compilación. Esto es lo que controla dónde httpddetermina dónde buscar su configuración. archivos y módulos .so por defecto.

Por ejemplo:

% 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 línea clave en esa salida es el HTTPD_ROOT. Eso define dónde ROOTdebe comenzar el directorio de Apache , /etc/httpden mi caso, cuando busco la configuración. archivos y módulos.

NOTA: Esto ROOTno es lo mismo que DocumentRoot. Esto ROOTes específico de cómo httpdse compiló el demonio, DocumentRootes para especificar dónde el httpddemonio debería comenzar a buscar contenido web real (archivos .html y tal).

Para mi httpd.confarchivo tengo las siguientes líneas de carga:

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

Dado esto, la ruta completa a sus módulos sería, por ejemplo:

/etc/httpd/modules/mod_auth_basic.so

Esto es de un sistema CentOS 5.x pero la técnica aún es apta.

Por cierto, puede ser un poco confuso porque en el caso de CentOS los archivos están organizados físicamente aquí:

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

... y luego accesible para el demonio Apache httpd, a través de esta ruta:

% 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

El modulesenlace se conecta /etc/httpd-> /usr/lib/httpd/modules.

slm
fuente
slm como dije en la publicación anterior, ServerRoot se define en la directiva ServerRoot y no tiene nada que ver con HTTPD_ROOT que se muestra a través de "httpd -V". Consulte las páginas web de Apache mencionadas en mi publicación anterior, o si desea cambiar la directiva ServerRoot en suarchivo httpd.conf y compruébelo usted mismo.
billynoah
ServerRoot es una forma de anular HTTPD_ROOT. HTTPD_ROOT se establece en tiempo de compilación a través del conmutador de configuración --prefix. Su publicación distinguía los diferentes b / w ServerRoot y DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot . ¡Es bueno verte registrado un nombre con tu cuenta de SF!
slm
¿Esto realmente responde a la pregunta: "¿Cómo le digo a Apache qué PHP usar?" ?
Pmpr
Trix el OP lo aceptó, así que sí.
slm
@slm Esto no responde la pregunta.
cuant
4

Puede encontrar archivos en su sistema con el locatecomando:

# localizar libphp5.so

Imprimirá las rutas completas de todos los archivos con ese nombre. Tengo uno a /usr/libexec/apache2/libphp5.so.

Rob Kennedy
fuente
1
¿Y qué? ¿Es esta una respuesta a la pregunta? ¿O una forma de encontrar un archivo?
Pmpr
1
@Trix, el autor de la pregunta dijo: "No sé qué ni dónde está eso". He mostrado cómo encontrar dónde está eso. Asumí que una vez que el autor de la pregunta viera todas las otras ubicaciones del archivo mencionado en cuestión, sería evidente cómo cambiar la configuración para usar una diferente.
Rob Kennedy
4

El directorio principal de los módulos cargados en httpd.conf (como:) libexec/apache2/libphp5.soestá definido por la ServerRootdirectiva que, de manera predeterminada, generalmente se establece en /usr. No recomendaría cambiar esto, pero puede ser útil para alguien saber exactamente dónde se define esa ruta.

El sitio web de Apache dice lo siguiente sobre ServerRoot :

Las rutas relativas en otras directivas de configuración (como Incluir o LoadModule, por ejemplo) se toman como relativas a este directorio.

además, los comentarios predeterminados del archivo httpd.conf leen:

ServerRoot: la parte superior del árbol de directorios donde se guardan los archivos de configuración, error y registro del servidor.

Billynoah
fuente
2
El OP no tiene una definición de ServerRoot. En cambio, ha formulado la pregunta "¿Cómo le digo a Apache qué PHP usar?". Si realmente quiere responderlo, responda
Pmpr
3

Apache debería estar buscando módulos en "/ usr / libexec / httpd /". Allí encontrará un archivo o un enlace simbólico llamado "libphp5.so". Si es un enlace simbólico, deberá volver a vincular al nuevo 5.2.8 libphp5.so, de lo contrario, simplemente copie el 5.2.8 libphp5.so a "/ usr / libexec / httpd /" y reinicie apache con "sudo apachectl restart" .


fuente
0

Tenía un Apache y PHP instalado en uno de los servidores. Esto fue instalado por el administrador del sistema anterior. Tanto el Apache como el PHP se cumplieron desde la fuente. Además de esto, había un PHP predeterminado instalado. Para saber qué PHP usa Apache. Ejecuto el siguiente comando

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

Esto me dio el camino a apache apxs

  APACHE_HOME/bin/apxs

Esto me dio información sobre qué Apache está siendo utilizado por este php. El php predeterminado dio un error cuando escribí

#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

Entonces de esta manera pude averiguar el php utilizado por Apache.

usuario2935688
fuente
1
Por favor, no publique la misma respuesta dos veces. En cambio, enlace a la primera respuesta.
Sven