¿Cómo obtengo PHP 5.3.8 para leer un archivo .user.ini?

Tengo un servidor Mac OS X que ejecuta Apache 2.2.21 y PHP 5.3.8

Me gustaría establecer algunas directivas de estilo php.ini por directorio. De acuerdo con la página de manual de PHP, desde PHP 5.3.0 ha sido posible anular las directivas encontradas en el archivo de configuración de tiempo de ejecución php.ini principal por directorio colocando un archivo llamado “.users.ini” en el directorio que contiene las secuencias de comandos que desea afectar.

Para mí, esta solución es preferible al uso de las instrucciones php_value y php_flag contenidas dentro de un archivo .htaccess; sin embargo, el archivo .user.ini que he creado está siendo ignorado por PHP.

De acuerdo con phpinfo (), mis archivos .user.ini deben volver a almacenarse en caché cada 5 minutos, y el nombre de archivo está configurado correctamente en “.user.ini”:

user_ini.cache_ttl 300 user_ini.filename .user.ini 

Apache está configurado en AllowOverides, y ya he confirmado que la configuración de la directiva PHP a través del archivo .htaccess reemplaza correctamente las configuraciones ini que quiero controlar. El archivo de prueba más simple que he probado es un archivo .user.ini que contiene solo la línea:

 display_errors = On 

Esto no funciona y se usa el directorio de todo el sistema (= Off). Sin embargo, el archivo .htaccess equivalente funciona como se esperaba, anulando la directiva de todo el sistema:

 php_flag display_errors on 

Una pista que puedo encontrar es el misterioso [PHP] al principio del archivo php.ini principal. No pude encontrar ninguna mención de este marcador de sección en el manual, así que pensé que tal vez era necesario iniciar el archivo con [PHP]. Intenté agregar esto al inicio de mi archivo .user.ini y volví a cargar mi página, esperé otros cinco minutos, volví a cargar, para asegurarme de que no estaba cargando una versión almacenada en caché, y desafortunadamente no hizo ninguna diferencia.

La otra pista que encontré es la statement igualmente misteriosa en la página del manual PHP antes mencionada que describe cómo usar un archivo .user.ini: “Estos archivos son procesados ​​solo por el CGI / FastCGI SAPI”. Desafortunadamente, no sé cómo confirmar que esta condición se cumple, excepto la línea en mi salida phpinfo () que dice: “GATEWAY_INTERFACE CGI / 1.1” ya que prácticamente no hay otra instancia de la cadena “cgi” en mi phpinfo ( ) salida. Me queda por suponer que esta statement misteriosa es de poca importancia y meramente indica que el CGI / FastCGI SAPI procesa (lo que sea que eso signifique), en lugar de advertirme que necesito activar algo. Corrígeme si estoy equivocado.

También se menciona en los comentarios en la misma página de manual de .user.ini que el procesamiento de los archivos .user.ini no funcionará cuando se usa php-fpm. Por lo que sé, no estoy usando eso, pero si hay una manera fácil de verificar, házmelo saber. Esto plantea la cuestión de si hay otras opciones de configuración o módulos que entran en conflicto con la función y deshabilitan la carga de archivos .user.ini. Alguien sabe la respuesta a eso?

Para completar, incluyo mi comando de configuración, en caso de que alguien pueda ver algún problema obvio, aunque no creo que lo haya cambiado por defecto:

‘/private/var/tmp/apache_mod_php/apache_mod_php-53.8~2/php/configure’ ‘–prefix = / usr’ ‘–mandir = / usr / share / man’ ‘–infodir = / usr / share / información ” –disable-dependency-tracking ” –sysconfdir = / private / etc ” –with-apxs2 = / usr / sbin / apxs ” –enable-cli ” –with-config-file -path = / etc ” –with-libxml-dir = / usr ” –with-openssl = / usr ” –with-kerberos = / usr ” –with-zlib = / usr ” – -enable-bcmath ” –with-bz2 = / usr ” –enable-calendar ” –with-curl = / usr ” –enable-exif ” –enable-ftp ” –with -gd ” –with-jpeg-dir = / BinaryCache / apache_mod_php / apache_mod_php-53.8 ~ 2 / Root / usr / local ” –with-png-dir = / BinaryCache / apache_mod_php / apache_mod_php-53.8 ~ 2 / Root / usr / local ” –enable-gd-native-ttf ” –with-ldap = / usr ” –with-ldap-sasl = / usr ” –enable-mbstring ” –enable- mbregex ” –with-mysql = mysqlnd ” –with-mysqli = mysqlnd ” –with-pdo-mysql = mysqlnd ” –with-mysql-sock = / var / mysql / mysql.sock ” –without-pear ” –with-iodbc = / usr ” –enable-shmop ” –with-snmp = / usr ” –enable-soap ” –enable-sockets ” – enable-sysvmsg ” – -enable-sysvsem ” –enable-sysvshm ” –enable-wddx ” –with-xmlrpc ” –with-iconv-dir = / usr ” –with-xsl = / usr ” – -enable-zend-multibyte ” –enable-zip ” –with-pcre-regex = / usr ‘

(Dado que usted, querido lector, ha leído hasta aquí, si ve algo extraño sobre la configuración anterior que no está relacionada, no dude en mencionarlo en un comentario adjunto a esta publicación original)

Recostackndo algunas pistas de los comentarios de otros miembros, he podido hacer suficiente investigación para responder la pregunta correctamente para referencia futura.

Como se explica en la sección Consideraciones generales de instalación de la documentación de PHP, PHP puede ejecutarse junto con un servidor Apache de una de estas dos maneras:

  1. Directamente dentro de Apache como un módulo de Apache (mod_php) también conocido como SAPI (Interfaz de progtwigción de aplicaciones de servidor), o
  2. Como un ejecutable independiente que se comunica con Apache a través del CGI (Common Gateway Interface) o protocolo FastCGI.

Cuando PHP se ejecuta como un módulo dentro de Apache (la configuración predeterminada en un Mac OS X Server), PHP no tiene acceso directo al sistema de archivos, y Apache proporciona todo lo que PHP necesita para hacer su trabajo. Lo que significa que no es una opción elegir opciones de configuración de último minuto por directorio desde el sistema de archivos. Esto significa que Apache debe ser responsable de entregar cualquier configuración por directorio al procesador PHP y, por lo tanto, debe configurarse a través de .htaccess (que Apache procesa y pasa a PHP)

Cuando PHP se ejecuta como su propio proceso (comunicándose con Apache a través de CGI o FastCGI), el procesador PHP puede acceder a la estructura del directorio directamente antes de que comience a procesar su script, por lo que es posible cargar un archivo de configuración adicional en un directorio que podría afectar cosas como la visualización de errores de análisis (es imposible decidir en el tiempo de ejecución de un script, porque si el script no analiza, PHP no puede seguir ninguna instrucción).

Entonces, la versión corta es, si PHP se está ejecutando como un módulo de Apache, necesita establecer directivas de configuración por directorio a través de un archivo .htaccess o cambiar a la Interfaz de puerta de enlace común.

De acuerdo con el Manual un poco más abajo:

“Si usa Apache, use los archivos .htaccess para obtener el mismo efecto”.

Además, ¿está ejecutando PHP en modo CGI o FastCGI a través de Apache?