Comment dire à Apache quel PHP utiliser?

34

J'utilise Apache2 sous Mac OS X (10.5) . Je viens de compiler PHP 5.2.8 et je me suis enfin mis au pdo-mysqltravail (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 un phpinfo(), Apache désactive PHP 5.2.6 (ma version précédente, sans pdo_mysql).

Comment dire à Apache quel PHP charger? Le httpd.confa la ligne:

LoadModule php5_module        libexec/apache2/libphp5.so

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

Est-ce ce que je dois changer?

Sam McAfee
la source
Lorsque vous avez compilé php, avez-vous utilisé make install? Si vous avez trouvé le chemin sur lequel votre module a été installé et que votre configuration apache a été modifiée. Mac a sa propre version d'apache et php5 est déjà installé, c'est pourquoi vous voyez une version différente.
Ruggs
Utilisateurs Homebrew, voir commentaire
@Mick
1
Avez-vous résolu votre problème? TOUTES les réponses ne sont que fous
Pmpr
Aucune de ces réponses ne répond à la question. C'est bizarre ...
quant

Réponses:

14

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 les options avec lesquelles le démon Apache a été construit au moment de la compilation. C’est ce qui contrôle où httpddé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é dans cette sortie est le HTTPD_ROOT. Cela définit le ROOTdébut du répertoire Apache , /etc/httpddans mon cas, lors de la recherche de config. fichiers et modules.

NOTE: Ce ROOTn'est pas la même chose que DocumentRoot. Ceci ROOTest spécifique à la façon dont le httpddémon a été compilé, il DocumentRoots'agit de spécifier où le httpddémon doit commencer à rechercher le contenu Web réel (fichiers .html et autres).

Pour mon httpd.conffichier, j'ai les lignes de charge 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

Dans ce cas, le chemin complet de 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 être un peu déroutant car dans le cas de CentOS, 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

... et ensuite accessible au démon Apache httpd, via 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 moduleslien relie /etc/httpd-> /usr/lib/httpd/modules.

slm
la source
slm, comme je l'ai indiqué dans l'article précédent, ServerRoot est défini dans la directive ServerRoot et n'a absolument rien à voir avec HTTPD_ROOT qui s'affiche via "httpd -V". Veuillez consulter les pages Web d'Apache référencées dans mon précédent article ou si vous souhaitez modifier la directive ServerRoot dans votrefichier httpd.conf et voir par vous-même.
Billynoah
ServerRoot est un moyen de remplacer HTTPD_ROOT. HTTPD_ROOT est défini à la compilation via le commutateur --prefix configure. Votre message distinguait les différents noms de serveur en noir et blanc ServerRoot et DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot . Content de voir que vous avez enregistré un nom avec votre compte SF!
Slm
Cela répond-il vraiment à la question: "Comment puis-je dire à Apache quel PHP utiliser?" ?
Pmpr
Trix l'OP l'a accepté alors oui.
Slm
@slm Ceci ne répond pas à la question.
quant
4

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

# localisez libphp5.so

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

Rob Kennedy
la source
1
Et alors? est-ce une réponse à la question? Ou un moyen de trouver un fichier?
Pmpr
1
@Trix, le demandeur a déclaré: "Je ne sais pas quoi ni où c'est." J'ai montré comment trouver où c'est. J'ai supposé qu'une fois que le demandeur avait vu tous les autres emplacements du fichier nommé en question, il était évident de modifier le paramètre pour en utiliser un autre.
Rob Kennedy
4

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

Le site Web d'Apache dit ceci à propos de ServerRoot :

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

De plus, les commentaires du fichier httpd.conf par défaut étaient les suivants:

ServerRoot: sommet de l'arborescence dans lequel sont conservés les fichiers de configuration, d'erreur et de journalisation du serveur.

Billynoah
la source
2
L'OP n'est pas après une définition de ServerRoot. Au lieu de cela, il a posé la question "Comment puis-je dire à Apache quel PHP utiliser?". Si vous voulez vraiment y répondre, alors répondez-le
Pmpr
3

Apache devrait rechercher des modules dans "/ usr / libexec / httpd /". Vous y trouverez un fichier ou un lien symbolique appelé "libphp5.so". S'il s'agit d'un lien symbolique, vous devrez créer un lien vers la nouvelle libphp5.so 5.2.8, sinon copiez simplement la libphp5.so 5.2.8 dans "/ usr / libexec / httpd /" et redémarrez apache avec "sudo apachectl restart" .


la source
0

J'avais un Apache et PHP installés sur l'un des serveurs. Cela a été installé par l'administrateur précédent du système. Apache et PHP ont été respectés à partir de la source. En plus de cela, un PHP par défaut était installé. 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 d'apache apxs

  APACHE_HOME/bin/apxs

Cela m'a donné des informations sur lequel Apache est utilisé par ce php. Le php par défaut donnait une erreur quand je tapais

#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.

utilisateur2935688
la source
1
S'il vous plaît ne postez pas la même réponse deux fois. Liez plutôt la première réponse.
Sven