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?
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
.
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
.
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.
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" .
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.