Como digo ao Apache qual PHP usar?

34

Estou executando o Apache2 em um Mac OS X (10.5) . Acabei de compilar o PHP 5.2.8 e finalmente comecei a pdo-mysqltrabalhar (ou pelo menos 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 isso phpinfo(), o Apache despeja o PHP 5.2.6 (minha versão anterior, sem pdo_mysql).

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

LoadModule php5_module        libexec/apache2/libphp5.so

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

É isso que eu tenho que mudar?

Sam McAfee
fonte
Quando você compilou o php, você usou o make install? Se você encontrou o caminho para o qual instalou seu módulo e alterou a configuração do apache para apontá-lo. O Mac possui sua própria versão do apache e php5 já instalada, e é por isso que você está vendo uma versão diferente.
Ruggs
Usuários Homebrew, consulte @Mick comment
BatteryAcid 8/15/15
11
Você resolveu o seu problema? Todas as respostas são apenas coisa louca
PMPR
Nenhuma dessas respostas responde à pergunta. Isso é bizarro ...
quant

Respostas:

14

Eu acho que todas essas respostas não estão realmente respondendo à pergunta. O nível de raiz pode ser determinado pela execução do comando httpd -V. Isso mostrará as opções com as quais o daemon Apache foi construído no momento da compilação. Isto é o que controla onde httpddetermina 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 principal nessa saída é a HTTPD_ROOT. Isso define onde o ROOTdiretório do Apache deve iniciar, /etc/httpdno meu caso, ao procurar por config. arquivos e módulos.

NOTA: Isso ROOTnão é o mesmo que DocumentRoot. Isso ROOTé específico de como o httpddaemon foi compilado, DocumentRootpara especificar onde o httpddaemon deve começar a procurar o conteúdo real da Web (arquivos .html e outros).

Para o meu httpd.confarquivo tenho as seguintes linhas 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 isso, o caminho completo para seus módulos seria, por exemplo:

/etc/httpd/modules/mod_auth_basic.so

Isso é 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 acessível ao daemon 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 moduleslink conecta /etc/httpd-> /usr/lib/httpd/modules.

slm
fonte
slm como afirmei no post anterior, o ServerRoot é definido na diretiva ServerRoot e não tem nada a ver com HTTPD_ROOT, que é exibido via "httpd -V". Consulte as páginas da Web do Apache mencionadas na minha postagem anterior, ou se você quiser alterar a diretiva ServerRoot no seuarquivo httpd.conf e veja por si mesmo.
precisa saber é
ServerRoot é uma maneira de substituir HTTPD_ROOT. HTTPD_ROOT é definido em tempo de compilação por meio da opção --prefix configure. Sua postagem distinguia os diferentes ServerRoot e DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot . É bom ver que você registrou um nome na sua conta SF!
Slm
Isso realmente responde à pergunta: "Como eu digo ao Apache qual PHP usar?" ?
Pmpr
Trix o OP aceitou isso sim.
Slm
@slm Isso não responde à pergunta.
quant
4

Você pode encontrar arquivos no seu sistema com o locatecomando:

# localizar libphp5.so

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

Rob Kennedy
fonte
11
E daí? isso é uma resposta para a pergunta? Ou uma maneira de encontrar um arquivo?
Pmpr
11
@Trix, o autor disse: "Não sei o que ou onde é isso." Eu mostrei como encontrar onde está. Supus que, uma vez que o solicitante visse todos os outros locais do arquivo nomeado em questão, seria evidente como alterar a configuração para usar outro.
Rob Kennedy
4

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

O site da Apache diz o seguinte sobre o ServerRoot :

Caminhos relativos em outras diretivas de configuração (como Include ou LoadModule, por exemplo) são usados ​​como relativos a este diretório.

Além disso, os comentários padrão do arquivo httpd.conf 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.

billynoah
fonte
2
O OP não está após uma definição para ServerRoot. Em vez disso, ele fez a pergunta "Como eu digo ao Apache qual PHP usar?". Se você realmente quer para responder a isso, então responder-lhe
PMPR
3

O Apache deve estar procurando por módulos em "/ usr / libexec / httpd /". Lá você encontrará um arquivo ou link simbólico chamado "libphp5.so". Se for um link simbólico, será necessário vincular novamente ao novo 5.2.8 libphp5.so; caso contrário, basta copiar o 5.2.8 libphp5.so para "/ usr / libexec / httpd /" e reiniciar o apache com "sudo apachectl restart" .


fonte
0

Eu tinha um Apache e PHP instalados em um dos servidores. Isso foi instalado pelo administrador do sistema anterior. O Apache e 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 executo 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 maneira, eu consegui descobrir o php usado pelo Apache.

user2935688
fonte
11
Por favor, não poste a mesma resposta duas vezes. Em vez disso, vincule à primeira resposta.
Sven