¿Cómo cambiar la versión de PHP que utiliza Apache2?

¿Cómo cambiar la versión de PHP que utiliza Apache2?

Ubuntu 10.04, MySQL 5.1, Apache 2.2 y PHP 5.2/5.3:

Acabo de descubrir que estoy usando la versión incorrecta de PHP para una aplicación CRM. Una vez que descubrí cómo hacer un phpinfo()script simple para decirme qué está usando Apache2, intenté cambiarlo php.inipara que mi servidor web usara el PHP que quiero. Bueno, este es mi problema. No estoy seguro de cómo hacer eso.

Compilé la versión de PHP que quiero /etcaquí:

/etc/php-5.2.8/

Dentro de esto, había un php.ini-recommendedarchivo al que le hice algunos cambios y al que le cambié el nombre php.inipara que PHP lo usara. Pero cuando abrí mi navegador, borré mi historial y fui a la http://localhost<CRM dir>/install.phpdirección, el asistente todavía dice que no estoy usando la versión correcta de PHP.

Residencia en esta publicación¿Qué tengo que hacer para cambiar la versión de PHP que aparece después de ejecutar mi test.phpscript? En otras palabras, phpinfo()dice que estoy ejecutando PHP 5.3.2, pero quiero cambiarlo a mi versión compilada 5.2.8 ubicada en /etc.

Respuesta1

Dependiendo de su servidor, debería buscar Apache, no PHP.

(Para RHEL/CentOS) mira/etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

Verás que tu módulo PHP es modules/libphp5.so.

AddHandler php5-script .phple dice a Apache que ejecute PHP en cualquier archivo con la extensión .php.

Si está utilizando un sistema operativo basado en RPM, probablemente sea más fácil desinstalar (suponiendo que pueda hacerlo) la versión actual de PHP y reinstalar la versión que está buscando.

rpm -qa | grep php

le mostrará qué versión de PHP está instalada actualmente.

Respuesta2

Si ya ha instalado otra versión de php, sólo necesita cambiar el módulo php* utilizado por apache.

por ejemplo, tengo php5 y php7.0. Cuando quiero que Apache use php7.0, solo necesito habilitar su módulo y deshabilitar el módulo php5.

sudo a2dismod php5
sudo a2enmod php7.0

Respuesta3

Hay dos métodos principales para instalar una nueva versión de PHP y decirle a Apache que la use: mod_phpy php-fpm.

Nota:El método preferido es php-fpm, y muchas distribuciones nuevas (incluido Fedora) lo utilizan de forma predeterminada.

Instalar PHP como módulo Apache SAPI

Aquíes la guía sobre esto para sistemas Unix, de la documentación oficial. Le faltan algunos puntos (al menos para mi configuración), así que sigo los pasos:

  1. Construya PHP desde la fuente. En el ./configurepaso, use --with-apxs2. Esto creará un módulo de controlador Apache 2 compartido para usted.

    Asegúrese de tener apxsel comando definido en su ruta o especifique su ruta como valor de la opción (es decir --with-apxs2=/path/to/apxs).

    Por ejemplo, si instaló Apache en todo el sistema y desea instalar este comando también (por ejemplo, en un entorno local), en Fedora y sus derivados, puede instalarlo de la siguiente manera:

    sudo dnf install httpd-devel
    
  2. Una vez finalizada la compilación (es decir, después de makeo make test), ejecútelo make install(tal vez como root). Obviamente, esto instalará PHP en la ruta que especificó (es decir, con --prefix).

    Lo que se hace justo antes de instalar PHP es, debido a la --with-apxs2opción, instalar el módulo PHP apache2handler SAPI. Prepara el objeto compartido (por ejemplo, en /usr/lib64/httpd/modules/libphp.so) y activa el módulo (por ejemplo, en /etc/httpd/conf/httpd.conf), agregando una de las siguientes líneas al archivo de configuración de Apache, dependiendo de la versión de PHP que haya instalado (la línea se inserta debajo de la sección "Dynamic Shared Soporte de objetos (DSO)"):

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    Nota:Al activar las versiones de PHP, especialmente las principales, tenga en cuenta comprobar que sólo hay uno de estos LoadModulemensajes para PHP disponible; de ​​lo contrario, el servidor Apache se niega a iniciarse.

Instale PHP como PHP-FPM (FastCGI Process Manager)

Por determinar. :)

Pasos finales

PHP 8.0 y superior paso adicional

En el caso de que su distribución aún no sea compatible con PHP8 (por ejemplo, Fedora 34) y haya instalado Apache2 desde el administrador de paquetes, debe dar un paso más.

El problema es que, desde PHP 8.0 en adelante, Apache2 usa identificadores diferentes para los módulos SAPI que antes. Estos identificadores se utilizan para detectar si está utilizando mod_phpo php-fpmen los archivos de configuración. Para PHP5, era php5_moduley mod_php5; para PHP7, es php7_moduley mod_php7, y para PHP8, es php_moduley mod_php.

En este caso, navegue hasta el directorio de configuraciones de Apache2 (p. ej. /etc/httpd) y comience a editar el archivo conf.d/php.conf. Hay dos IfModulesecciones allí: una para habilitarla php-fpmsi no la usas mod_phpy la otra para habilitarla mod_phpsi la estás usando (es decir, usarla LoadModuleen algún lugar de las configuraciones). Debe actualizar estas condiciones para cubrir también PHP8.

Por ejemplo, considere lo siguiente:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

Deberías rodear la configuración principal con una IfModulesección más como esta:

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

Y haga lo mismo mod_phptambién con la sección de configuración del habilitador.

Último paso

Reinicie el servicio Apache:

service httpd restart

Ahora phpinfo()debería mostrarle la nueva versión de PHP que acaba de instalar. Deberías estar feliz ahora. :)

Respuesta4

Tuve el mismo problema donde phpinfo() mostraba la versión 7.0 aunque había actualizado a la versión 7.3. Y resulta que simplemente tenía quereiniciar apache.

Lo usé sudo systemctl restart httpden centos7

información relacionada