¿Por qué la versión de PHP es diferente en phpinfo () y CLI?

27

Me di cuenta de que hay una coincidencia errónea entre la versión PHP informada por phpinfo()y php -v(en la CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Estoy trabajando en un Mac OS X 10.10 (Yosemite) e instalé una biblioteca ( php-version) para tratar de administrar las versiones de PHP.

Me informa 3 versiones diferentes instaladas en mi computadora portátil:

  5.4.41
  5.5.25
* 5.6.9

Me gustaría configurar la misma versión de PHP tanto en Apache como en CLI.

¿Cómo puedo decirle a Apache qué versión de PHP usa?

Traté de escribir esta línea en mi httpd.conf:

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

Luego:

sudo apachectl restart

Pero todo esto no resuelve el problema ... En mi información de PHP todavía tengo: 5.5.24

Salvatore Dibenedetto
fuente
Véase también superuser.com/questions/969861/...
bertieb
1
@bertieb La pregunta es similar a la otra. Acabo de responder , pero hay un problema específico aquí que intentaré responder también.
JakeGould

Respuestas:

14

Aquí hay algunos problemas diferentes que se esconden bajo el concepto de confusión de la versión de PHP, por lo que intentaremos abordar cada uno de ellos lo más claramente posible. Primero esto:

Me di cuenta de que hay una coincidencia errónea entre la versión PHP informada por phpinfo()y php -v(en la CLI).

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI no es lo mismo que el módulo PHP Apache.

Como explico en la respuesta a esta otra pregunta aquí , ¡no se asuste! Si le preocupa qué versión de PHP está utilizando su servidor Apache, phpinfo()siempre debe prestar atención a la salida de . El módulo PHP Apache y el binario de línea de comando PHP son dos cosas diferentes que no interfieren entre sí.

Solo preste atención a la salida de phpinfo()si le preocupa configurar la versión correcta del módulo PHP en Apache.

Dicho esto, todavía parece tener problemas para cargar el módulo PHP correcto en Apache:

Traté de escribir esta línea en mi httpd.conf:

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

Asegúrese de que su servidor Apache esté cargando el módulo PHP correcto.

Si bien lo que hiciste técnicamente parece ser correcto, la única razón por la que puedo ver que esto no funciona es que de alguna manera hay otra LoadModule php5_moduledirectiva en los archivos de configuración de Apache que reemplaza el valor que estás configurando en esa línea.

Recomendaría mirar a través de httpd.conf, que supongo que se encuentra aquí, /etc/apache2/httpd.confy ver si tal vez hay alguna otra LoadModule php5_moduleque te perdiste o no notaste al editar ese archivo. Al mirar mi archivo equivalente en Mac OS X 10.9.5, veo que la línea está comentada, ya que no uso las configuraciones Apache / PHP de Mac OS X, y lee algo como esto:

#LoadModule php5_module libexec/apache2/libphp5.so

Por supuesto, en su caso sería sin comentarios. Puede encontrar más detalles sobre la configuración de Apache y PHP para el desarrollo web en este sitio .

Considere seriamente el uso de MAMP como una alternativa a las peculiaridades de Mac OS X Apache / PHP.

Ahora todo lo dicho, no sé lo que está intentando hacer, pero si está haciendo desarrollo web en un sistema Mac OS X, debería considerar seriamente usar MAMP en lugar de piratear la pila web central de Mac OS X para obtener cosas corriendo.

El beneficio de MAMP es que es un nivel de producción de Mac OS X equivalente a una pila LAMP. Y dado que está orientado al desarrollo web del mundo real, tiene todos los módulos y configuraciones configurados exactamente como uno debería tenerlos configurados.

El problema central con Apache y PHP en Mac OS X es que el software generalmente está desactualizado, un problema para configurar / ajustar y administrar y un dolor de cabeza para depurar cuando sucede cosas como esta. ¿Y qué pasa si aparece una actualización de Mac OS X que borra la configuración cuidadosamente de Apache y PHP? Has vuelto al punto de partida.

JakeGould
fuente
¿Por qué respondiste este Duplicado en lugar de marcar la pregunta como duplicado?
Pmpr
@Trix Porque ese "duplicado" es una respuesta similar a una pregunta diferente publicada con días de diferencia. Como respondo a un comentario similar aquí , “La pregunta @bertieb es de hecho similar a esa otra. Acabo de responder, pero hay un problema específico aquí que intentaré responder también. - JakeGould 12 de septiembre de 15 a 0:42 "Una pregunta es sobre la diferencia entre PHP desde la línea de comandos. El otro es sobre los problemas del módulo AND PHP.
JakeGould
4

Encontré la solución a mi problema. Después de editar /etc/apache2/httpd.conf, solía reiniciar Apache usando:

sudo apachectl restart

Por alguna razón, al usar este comando, Apache no buscará las actualizaciones en el httpd.confy cargará la configuración anterior.

Utilizando:

sudo apachectl -k stop
sudo apachectl -k start

Realice una especie de reinicio completo de todos los servicios y también lea las actualizaciones en el archivo de configuración y finalmente lea la nueva ruta para php5_module:

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

Gracias también @JakeGould por su explicación .

Salvatore Dibenedetto
fuente
Editó la publicación para eliminar la -kbandera de los apachectlcomandos ya que si marca apachectl -hesa bandera / opción no existe allí. No tengo idea de dónde sacaste eso. Además, mientras declaras hacer stopy startaclaraste las cosas, lo extraño es que restarten los sistemas Linux hace exactamente eso. Si marca la secuencia de comandos ubicada en /usr/sbin/apachectl(es una secuencia de comandos, use cualquier editor de texto para ver) parece que también hace exactamente eso. ¿Quizás en Mac OS X LaunchDaemonspara Apache es simplemente "extraño" en comparación con Linux estándar? De todos modos, genial resolviste esto.
JakeGould
Solo para su información, encontré el comando con la bandera -k aquí: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto
Estás en lo correcto. Miré a través de la salida de “ayuda” de /usr/sbin/apachectl(sin ningún orden) y se dice claramente, [-k start|restart|graceful|graceful-stop|stop]. Estoy tan acostumbrado a la forma en que Apache funciona en los sistemas Linux ahora parece que olvidé la -kbandera para usar con apachectlcomandos. Entonces, sabiendo que el verdadero problema que tenía es que intentaba reiniciar con este comando sudo apachectl restartcuando debería haber -kagregado la bandera de esta manera sudo apachectl -k restart.
JakeGould