Como eu digo ao Apache qual PHP usar?

33

Estou executando o Apache2 em um Mac OS X (10.5) . Eu apenas compilei PHP 5.2.8 e finalmente consegui pdo-mysql trabalhando (ou assim eu acho).

Este comando do terminal:

php --version

está mostrando 5.2.8 e eu tenho os módulos certos instalados.

Mas, quando eu faço um phpinfo() , o Apache copia o PHP 5.2.6 (minha versão anterior, sem pdo_mysql ).

Como eu digo ao Apache qual PHP carregar? O httpd.conf tem a linha:

LoadModule php5_module        libexec/apache2/libphp5.so

Mas eu não sei o que ou onde é isso.

É isso que eu tenho que mudar?

    
por Sam McAfee 23.12.2008 / 02:15

5 respostas

14

Acho que todas essas respostas não estão respondendo a pergunta. O nível da raiz pode ser determinado executando o comando httpd -V . Isso mostrará a você quais opções o daemon do Apache foi construído em tempo de compilação. Isto é o que controla onde httpd determina onde procurar sua configuração. arquivos e módulos .so por padrão.

Por exemplo:

% 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"

A linha chave nessa saída é o HTTPD_ROOT . Isso define onde o diretório ROOT do Apache deve iniciar, /etc/httpd no meu caso, ao procurar por config. arquivos e módulos.

NOTA: Este ROOT não é o mesmo que DocumentRoot . Esse ROOT é específico de como o daemon httpd foi compilado, o DocumentRoot é para especificar onde o daemon httpd deve começar a procurar por conteúdo da web real (arquivos .html e outros).

Para o meu arquivo httpd.conf , tenho as seguintes linhas de carregamento:

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 isso, o caminho completo para seus módulos seria, por exemplo:

/etc/httpd/modules/mod_auth_basic.so

Isto é de um sistema CentOS 5.x , mas a técnica ainda é adequada.

BTW, pode ficar um pouco confuso porque no caso do CentOS os arquivos são organizados fisicamente aqui:

% 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 depois acessível ao daemon do Apache, httpd , através deste caminho:

% 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

O link modules conecta /etc/httpd - > /usr/lib/httpd/modules .

    
por 17.01.2013 / 02:02
4

Você pode encontrar arquivos no seu sistema com o comando locate :

# locate libphp5.so

Ele irá imprimir os caminhos completos de todos os arquivos com esse nome. Eu tenho um em /usr/libexec/apache2/libphp5.so .

    
por 23.12.2008 / 03:14
4

O diretório pai dos módulos carregados no httpd.conf (como: libexec/apache2/libphp5.so ) é definido pela diretiva ServerRoot , que por padrão é normalmente definida como /usr . Eu não recomendaria mudar isso, mas pode ser útil para alguém saber exatamente onde exatamente esse caminho é definido.

O site do Apache diz o seguinte sobre ServerRoot :

Relative paths in other configuration directives (such as Include or LoadModule, for example) are taken as relative to this directory.

adicionalmente, os comentários do arquivo httpd.conf padrão são:

ServerRoot: A parte superior da árvore de diretórios sob a qual os arquivos de configuração, erro e log do servidor são mantidos.

    
por 17.01.2013 / 04:34
3

O Apache deve estar procurando por módulos em "/ usr / libexec / httpd /". Lá você encontrará um arquivo ou um link simbólico chamado "libphp5.so". Se é um link simbólico, você precisará voltar para o novo 5.2.8 libphp5.so, caso contrário apenas copie o 5.2.8 libphp5.so para "/ usr / libexec / httpd /" e reinicie o apache com "sudo apachectl restart" .

    
por 23.12.2008 / 03:11
0

Eu tinha um Apache e PHP instalado em um dos servidores. Isso foi instalado pelo administrador do sistema anterior. Tanto o Apache quanto o PHP foram cumpridos a partir da fonte. Além disso, havia um PHP padrão instalado. Então, para saber qual PHP é usado pelo Apache. Eu corro o comando abaixo

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

Isso me deu o caminho para o apache apxs

  APACHE_HOME/bin/apxs

Isso me deu informações sobre qual Apache está sendo usado por este php. O php padrão deu erro quando eu digitei

#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

Então, dessa forma, consegui descobrir o php usado pelo Apache.

    
por 27.03.2015 / 22:09