PHP

  • CentOS 7.3: ¡necesito actualizar a PHP 7 y no viene en los repositorios por defecto! { Notas de Laboratorio }

    CentOSphp7upgradeSCL

    Problema:

    Tengo una instancia de CentOS 7, con el clásico Apache funcionando y por requerimientos de versiones necesito actualizarme a PHP 7...pero no lo veo en los repositorios.

    Solución utilizada:

    • Utilizando una consola (vuelvo y lo confieso no he superado mi adicción a la interfaz de comandos, me hace sentir en matrix), iniciamos sesión con permisos administrativos (también se puede usar sudo) y agregamos el repositorio SCL (Software Collections), que incluye versiones actualizadas, como la requerida de php: yum install centos-release-scl
    • Instalamos nuestro php: yum install rh-php70 y las dependencias que necesitemos, se pueden listar con yum list rh-php70\*, en específico se requiere como mínimo soporte para mysql (si se usa) y el manejador de procesos php (FPM-PHP), una instalación básica podría ser: 
      • rh-php70-php-fpm
      • rh-php70-php-mysqlnd
      • rh-php70-php-gd
      • rh-php70-php-pspell
      • rh-php70-php-soap
      • rh-php70-php-bcmath
    • Decirle a apache que use fpm, en /etc/httpd/conf.d/php.conf:

    ...

    <FilesMatch \.php$>

    # SetHandler application/x-httpd-php

    SetHandler "proxy:fcgi://127.0.0.1:9000"

    </FilesMatch>

    ...

    • Si se necesitan configuraciones adicionales: php.ini esta en /etc/opt/rh/rh-php70/php.ini ...para correr el servicio FPM como otro usuario que no sea apache (tal vez nginx), eso se configuraría en /etc/php-fpm.d/www.conf (no olvidar reiniciar servicios)
    • Iniciar el servicio fpm: service rh-php70-php-fpm start (para dejarlo como autoarranque: systemctl enable rh-php70-php-fpm). No olvidar reiniciar apache: service httpd restart.

     

  • Cómo incrementar los valores de timeout para PHP en Apache

    5Mayo2016Timeout

    Problema:

    • Se necesita incrementar la cantidad de tiempo que le toma una aplicación en PHP para ejecutarse, antes de que nuestro servidor decida detener el proceso (PHP session timeout). Si bien conviene por eficiencia tener este valor bajo, hay aplicaciones que por diseño necesitan valores más altos, o situaciones específicas que lo requieren (actualización de aplicativos, carga de datos).

    Solución utilizada:

    • Si no se recuerda o conoce el manejador de PHP que se está ejecutando (¿cómo usa la máquina usa PHP?...por medio de mod_php (Apache DSO, Dinamic Shared Object), suPHP, FastCGI, CGI o PHP-FPM), un pequeño script en la carpeta web del sitio (el nombre del script lo colocan ustedes, la ruta depende del servidor), con las siguientes líneas, nos puede confirmar la ruta del archivo principal php.ini (obviamente no se recomienda tenerlo activo en producción):
      • <?php
        phpinfo();
        ?>
    • Hay dos variables a modificar: max_input_time (tiempo máximo disponible para desplegar/analizar datos de entrada para el script PHP) y max_execution_time (tiempo total permitido de ejecución para el script de PHP). Ambas tienen asignado por defecto 60 segundos, este sería el valor a incrementar (en una actualización de Moodle (por ejemplo) fué necesario aumentar su valor a 120 segundos).
    • Si se utiliza PHP por medio de PHP-FPM, es posible aumentar este valor en la variable request_terminate_timeout del archivo de configuración de este servicio.
    • Para que los cambios se actualicen en el sistema, es necesario reiniciar servicios:
      • service httpd reload
      • service php5-fpm reload #en caso de usar php-fpm

    Imagen Original (CC Atribución): https://flic.kr/p/aVdo7v

    Fuentes Consultadas: