web-dev-qa-db-fra.com

Comment dire à Apache quel PHP utiliser?

J'utilise Apache2 sur un Mac OS X (10.5). Je viens de compiler PHP 5.2.8 et j'ai finalement fait fonctionner pdo-mysql (Du moins je pense).

Cette commande de terminal:

php --version

montre 5.2.8 et j'ai les bons modules installés.

Mais, quand je fais une phpinfo(), Apache se décharge PHP 5.2.6 (ma version précédente, sans pdo_mysql).

Comment puis-je dire à Apache quel PHP à charger? Le httpd.conf A la ligne:

LoadModule php5_module        libexec/Apache2/libphp5.so

Mais, je ne sais pas quoi ni où c'est.

Est-ce cela que je dois changer?

34
Sam McAfee

Je pense que toutes ces réponses ne répondent pas vraiment à la question. Le niveau racine peut être déterminé en exécutant la commande httpd -V. Cela vous montrera avec quelles options le démon Apache a été construit au moment de la compilation. C'est ce qui contrôle où httpd détermine où chercher sa configuration. fichiers et modules .so par défaut.

Par exemple:

% 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 ligne clé de cette sortie est le HTTPD_ROOT. Cela définit où le répertoire ROOT d'Apache doit commencer, /etc/httpd dans mon cas, lors de la recherche de config. fichiers et modules.

REMARQUE: Ce ROOT n'est pas la même chose que DocumentRoot. Ce ROOT est spécifique à la façon dont le démon httpd a été compilé, le DocumentRoot sert à spécifier où le démon httpd doit commencer à rechercher le contenu Web réel (. fichiers html et autres).

Pour mon httpd.conf fichier J'ai les lignes de chargement suivantes:

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

Compte tenu de cela, le chemin d'accès complet à vos modules serait, par exemple:

/etc/httpd/modules/mod_auth_basic.so

Cela provient d'un système CentOS 5.x mais la technique est toujours appropriée.

BTW, cela peut devenir un peu déroutant car dans CentOS ' cas les fichiers sont organisés physiquement ici:

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

... puis accessible au démon Apache, httpd, par ce chemin:

% 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

Le lien modules relie /etc/httpd -> /usr/lib/httpd/modules.

14
slm

Vous pouvez trouver des fichiers sur votre système avec la commande locate:

 # localiser libphp5.so 

Il imprimera les chemins complets de tous les fichiers portant ce nom. J'en ai un à /usr/libexec/Apache2/libphp5.so.

4
Rob Kennedy

Le répertoire parent des modules chargés dans httpd.conf (tels que: libexec/Apache2/libphp5.so) est défini par la directive ServerRoot qui, par défaut, est généralement définie sur /usr. Je ne recommanderais pas de changer cela, mais il peut être utile pour quelqu'un de savoir exactement où ce chemin est défini.

Le site Web d'Apache dit ce qui suit à propos de ServerRoot:

Les chemins relatifs dans d'autres directives de configuration (comme Include ou LoadModule, par exemple) sont considérés comme relatifs à ce répertoire.

en outre, les commentaires du fichier httpd.conf par défaut sont les suivants:

ServerRoot: le haut de l'arborescence de répertoires sous lequel la configuration, les erreurs et les fichiers journaux du serveur sont conservés.

4
billynoah

Apache devrait rechercher des modules dans "/ usr/libexec/httpd /". Vous y trouverez soit un fichier soit un lien symbolique appelé "libphp5.so". S'il s'agit d'un lien symbolique, vous devrez vous reconnecter au nouveau libphp5.so 5.2.8, sinon copiez simplement le libphp5.so 5.2.8 dans "/ usr/libexec/httpd /" et redémarrez Apache avec "Sudo apachectl restart" .

3
Tautologistics

J'avais un Apache et PHP installé sur l'un des serveurs. Il a été installé par l'administrateur sys précédent. Apache et PHP ont été respectés à partir de la source) . En plus de cela il y avait un PHP installé par défaut. Donc pour savoir quel PHP est utilisé par Apache. Je lance la commande ci-dessous)

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

Cela m'a donné le chemin vers les apx Apache

  Apache_HOME/bin/apxs

Cela m'a donné des informations sur Apache qui est utilisé par ce php. Le php par défaut a donné une erreur lorsque j'ai tapé

#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

Donc, de cette façon, j'ai pu comprendre le php utilisé par Apache.

0
user2935688