Pourquoi la version PHP est-elle différente dans phpinfo () et CLI?


27

J'ai réalisé qu'il y avait un manque de correspondance entre la version PHP signalée par phpinfo()et php -v(dans la CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Je travaille sur un Mac OS X 10.10 (Yosemite) et j'ai installé une bibliothèque ( php-version) pour essayer de gérer les versions PHP.

Il me rapporte 3 versions différentes installées sur mon ordinateur portable:

  5.4.41
  5.5.25
* 5.6.9

Je voudrais définir la même version de PHP dans Apache et CLI.

Comment savoir à Apache quelle version PHP utiliser?

J'ai essayé d'écrire cette ligne dans mon httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Ensuite:

sudo apachectl restart

Mais tout cela ne résout pas le problème… Dans mes infos PHP, j'ai encore: 5.5.24



1
@bertieb Question est en effet similaire à cette autre. Je viens d'y répondre , mais il y a un problème spécifique ici, je vais essayer de répondre également.
JakeGould

Réponses:


14

Quelques problèmes différents se cachent tous sous le concept de confusion de version PHP, alors essayez de traiter chacun d'eux aussi clairement que possible. D'abord ceci:

J'ai réalisé qu'il y avait un manque de correspondance entre la version PHP signalée par phpinfo()et php -v(dans la CLI).

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI n'est pas le même que le module PHP Apache.

Comme je l'explique dans la réponse à cette autre question ici , ne paniquez pas! Si vous êtes préoccupé par la version PHP utilisée par votre serveur Apache, la sortie de phpinfo()est toujours celle à laquelle vous devez faire attention. Le module PHP Apache et le binaire de ligne de commande PHP sont deux choses différentes qui n'interfèrent pas entre elles.

Faites juste attention à la sortie de phpinfo()si vous êtes soucieux de définir la bonne version du module PHP dans Apache.

Cela dit, vous semblez toujours avoir des problèmes pour charger le bon module PHP dans Apache:

J'ai essayé d'écrire cette ligne dans mon httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Assurez-vous que votre serveur Apache charge le bon module PHP.

Bien que ce que vous avez fait semble techniquement correct, la seule raison pour laquelle cela ne fonctionne pas est qu'il existe en quelque sorte une autre LoadModule php5_moduledirective dans les fichiers de configuration Apache qui remplace la valeur que vous définissez cette ligne.

Je recommanderais de parcourir le httpd.conf—qui je suppose qu'il se trouve ici /etc/apache2/httpd.conf— et de voir s'il y en a peut-être un autre LoadModule php5_moduleque vous avez manqué ou que vous n'avez pas remarqué lors de la modification de ce fichier. En regardant mon fichier équivalent dans Mac OS X 10.9.5, je vois que la ligne est commentée - car je n'utilise pas les configurations Apache / PHP de Mac OS X - et lit quelque chose comme ceci:

#LoadModule php5_module libexec/apache2/libphp5.so

Bien sûr, dans votre cas, ce serait sans commentaire. Plus de détails sur la configuration d'Apache et de PHP pour le développement Web peuvent être trouvés sur ce site .

Envisagez sérieusement d'utiliser MAMP comme alternative aux bizarreries Apache / PHP de Mac OS X.

Maintenant, tout cela dit, je ne sais pas ce que vous essayez de faire, mais si vous faites du développement Web sur un système Mac OS X, vous devriez sérieusement envisager d'utiliser MAMP au lieu de pirater la pile Web principale de Mac OS X pour obtenir des choses. fonctionnement.

L'avantage de MAMP est qu'il s'agit d'un équivalent Mac OS X extrêmement productif d'une pile LAMP. Et comme il est orienté vers le développement Web dans le monde réel, il a tous les modules et configurations configurés exactement comme on devrait les configurer.

Le problème principal avec Apache et PHP sur Mac OS X est que le logiciel est généralement obsolète, une douleur à configurer / modifier et gérer et un mal de tête à déboguer lorsque des choses comme cela se produisent. Et si une mise à jour de Mac OS X arrive qui efface vos paramètres Apache et PHP soigneusement configurés? Vous êtes de retour à la case départ.


Pourquoi avez-vous répondu à ce doublon au lieu de marquer la question comme un doublon?
2017

@Trix Parce que ce «doublon» est une réponse similaire à une question différente postée à quelques jours d'intervalle. Comme je réponds à un commentaire similaire ici , «@bertieb Question est en effet similaire à cette autre. Je viens d'y répondre, mais il y a un problème spécifique ici, je vais essayer de répondre également. - JakeGould 12 septembre 15 à 0:42 ”Une question concerne la différence entre PHP à partir de la ligne de commande. L'autre concerne les problèmes du module AND PHP.
JakeGould

4

J'ai trouvé la solution à mon problème. Après l'édition, /etc/apache2/httpd.confje redémarrais apache en utilisant:

sudo apachectl restart

Pour une raison quelconque, l'utilisation de cette commande Apache ne récupérerait pas les mises à jour dans le httpd.confet ne chargerait pas l'ancienne configuration.

En utilisant:

sudo apachectl -k stop
sudo apachectl -k start

Faites une sorte de redémarrage dur de tous les services et lit également les mises à jour dans le fichier de configuration et enfin lisez le nouveau chemin pour php5_module:

/usr/local/opt/php56/libexec/apache2/libphp5.so

Merci également à @JakeGould pour son explication .


Modifié le message pour supprimer l' -kindicateur des apachectlcommandes car si vous vérifiez apachectl -hque l'indicateur / l'option n'existe pas là-bas. Je ne sais pas d'où tu viens. De plus, alors que vous déclarez faire stopet startclarifier les choses, la chose étrange est que restartsur les systèmes Linux, c'est exactement cela. Si vous vérifiez le script qui se trouve dans /usr/sbin/apachectl(c'est un script, utilisez n'importe quel éditeur de texte pour le voir), il semble faire exactement cela aussi. Peut-être que sur Mac OS X, LaunchDaemonsApache est juste «bizarre» par rapport à Linux standard? Quoi qu'il en soit, vous avez résolu ce problème.
JakeGould

Juste pour votre information, j'ai trouvé la commande avec le drapeau -k ici: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto

Vous avez raison. Je regardais par la sortie « aide » de /usr/sbin/apachectl(sans commande) et il est clairement, [-k start|restart|graceful|graceful-stop|stop]. Je suis tellement habitué à la façon dont Apache fonctionne sur les systèmes Linux, il semble que j'ai oublié le -kdrapeau à utiliser avec les apachectlcommandes. Donc, sachant que le vrai problème que vous aviez, c'est que vous tentiez de redémarrer avec cette commande sudo apachectl restartalors que le -kdrapeau aurait dû être ajouté comme ceci sudo apachectl -k restart.
JakeGould
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.