Guía de tecnologías

Configurar php.ini por sitio con PHP CGI/FastCGI

4 min read DevOps Actualizado 01 Oct 2025
Configurar php.ini por sitio con PHP CGI/FastCGI
Configurar php.ini por sitio con PHP CGI/FastCGI

4 Pruebas

Ahora creamos un pequeño archivo de prueba PHP, por ejemplo en el sitio web www.example1.com…

vi /srv/www/web1/web/info.php

| |

… y llamamos a ese archivo desde un navegador (http://www.example1.com/info.php). Si todo va bien, la salida debería ser similar a ésta y deberías ver CGI/FastCGI en la línea Server API:

Captura de phpinfo() que muestra Server API: CGI/FastCGI

5 php.ini personalizado para cada sitio web

Como cada sitio web tiene su propio script wrapper php-fcgi-starter, es posible definir diferentes php.ini para distintos sitios. Para demostrarlo, copiaremos el php.ini por defecto (/etc/php5/fastcgi/php.ini) al directorio /srv/www/web2/ y haremos que www.example2.com use ese php.ini:

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

(Puedes ahora modificar /srv/www/web2/php.ini a tu gusto.)

Luego abrimos /srv/www/php-fcgi-scripts/web2/php-fcgi-starter…

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

… y ponemos /srv/www/web2/ en la variable PHPRC:

| #!/bin/sh PHPRC=/srv/www/web2/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi |

Reinicia Apache después:

/etc/init.d/apache2 restart

Crea un nuevo archivo phpinfo(); para www.example2.com…

vi /srv/www/web2/web/info.php

| |

… y accede desde un navegador (http://www.example2.com/info.php). La línea Loaded Configuration File debería mostrar ahora /srv/www/web2/php.ini:

Captura de phpinfo() que muestra Loaded Configuration File apuntando a /srv/www/web2/php.ini

6 Cambiar configuraciones individuales de PHP

En lugar de pasar un php.ini completo, también puedes cambiar ajustes individuales de PHP en el script wrapper php-fcgi-starter (o combinarlos) usando la opción -d del ejecutable PHP. Por ejemplo, para desactivar magic_quotes_gpc para el sitio www.example2.com, edita:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/php5/fastcgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi -d magic_quotes_gpc=off |

Reinicia Apache después:

/etc/init.d/apache2 restart

Vuelve a llamar al script info.php en un navegador (http://www.example2.com/info.php) y busca la línea magic_quotes_gpc — ahora debería mostrar Off:

Captura de phpinfo() que muestra magic_quotes_gpc en Off

7 Enlaces

Recomendaciones rápidas

Important: prueba siempre cambios en un entorno de staging antes de aplicarlos en producción. Guarda copias del php.ini y del script php-fcgi-starter antes de editar.

Notas: las rutas y nombres de usuario (web1, web2) son ejemplos; adáptalos a tu estructura y permisos reales.

Checklist para el administrador

  • Crear info.php en el sitio y verificar phpinfo().
  • Copiar php.ini personalizado si se necesita un archivo completo por sitio.
  • Ajustar PHPRC en php-fcgi-starter y confirmar propietario/permiso del php.ini.
  • Reiniciar Apache y comprobar Loaded Configuration File.
  • Para ajustes puntuales, usar exec /usr/bin/php-cgi -d clave=valor.
  • Registrar cambios en control de versiones o en la documentación interna.

Solución de problemas rápida

  1. Si no ves CGI/FastCGI en phpinfo(): confirma que el wrapper se está usando y que el VirtualHost ejecuta el script correcto.
  2. Si Loaded Configuration File apunta a otro php.ini: revisa PHPRC y que el usuario del proceso tenga permisos de lectura.
  3. Si los cambios con -d no surten efecto: verifica reinicio del servicio y que no exista otra capa (por ejemplo, PHP-FPM) en la ruta.
  4. Permisos: si PHP no puede leer el php.ini, los ajustes no se aplicarán; usa chown/chmod según tu política.

Alternativas y cuándo usarlas

  • PHP-FPM con pools por sitio: más moderno y escalable que wrappers CGI; permite pools con usuarios y php.ini separados por pool.
  • .user.ini (para PHP en modo CGI/CGI/FastCGI si está soportado): útil para cambiar valores por directorio, pero con limitaciones de directivas.
  • mod_php (PHP como módulo de Apache): no permite php.ini por sitio fácilmente; usar solo si necesitas rendimiento y no procesos por usuario.

Contraejemplo: si tu infraestructura ya usa PHP-FPM, cambiar wrappers de CGI no es la mejor ruta; crea pools de FPM por sitio en su lugar.

Mini metodología (pasos recomendados)

  1. Crear info.php y comprobar el estado actual.
  2. Decidir si necesitas un php.ini completo o solo cambiar variables individuales.
  3. Implementar cambios en /srv/www//php.ini o en php-fcgi-starter.
  4. Reiniciar servicio web y validar con phpinfo().
  5. Documentar y versionar la configuración.

Glosario en una línea

  • PHPRC: variable de entorno que indica al ejecutable php-cgi la ruta del php.ini a usar.
  • php-fcgi-starter: script wrapper que inicializa variables de entorno y ejecuta php-cgi para un sitio.
  • phpinfo(): función PHP que muestra la configuración y variables de entorno.

Resumen final

Puedes gestionar la configuración de PHP por sitio usando scripts wrapper que establecen PHPRC o pasando opciones individuales con -d. Para instalaciones modernas y multisitio con necesidades de aislamiento, considera migrar a PHP-FPM con pools por sitio.

Autor
Edición

Materiales similares

Guardar enlaces de Tweets para leer más tarde
Productividad

Guardar enlaces de Tweets para leer más tarde

Cómo minar Dogecoin en tu portátil
Criptomonedas

Cómo minar Dogecoin en tu portátil

Velocidad distinta para trackpad y ratón — AHK y utilidades
Productividad

Velocidad distinta para trackpad y ratón — AHK y utilidades

Arreglar RE4 Fatal D3D Error 25 — Guía práctica
Soporte técnico

Arreglar RE4 Fatal D3D Error 25 — Guía práctica

Probar roles Ansible con Molecule y Docker
DevOps

Probar roles Ansible con Molecule y Docker

Configurar php.ini por sitio con PHP CGI/FastCGI
DevOps

Configurar php.ini por sitio con PHP CGI/FastCGI