¿Cómo configuro archivos php.ini por sitio en un servidor LAMP usando NameVirtualHosts?

10

Tengo un servidor LAMP que sirve a varios sitios web diferentes usando NameVirtualHosts .

Hasta hace poco, tener un archivo php.ini global ha estado bien, pero recientemente uno de nuestros desarrolladores ha solicitado algunas configuraciones en php.ini que prefiero no configurar globalmente.

Estoy bastante seguro de que he oído que puede configurar archivos php.ini por sitio , pero no sé cómo hacerlo.

¿Alguien puede señalarme en la dirección correcta sobre cómo lograr esto?

Brent
fuente

Respuestas:

14

La mayoría de las configuraciones que colocaría en su php.ini también se pueden colocar en un .htaccess o en la configuración de apache para ese sitio. Por ejemplo, uno de mis hosts virtuales tiene esto en .htaccess

    php_value display_errors 1
    php_value register_globals 0
    php_value short_open_tag 0
    php_value magic_quotes_runtime 0
    php_value magic_quotes_gpc 0
    php_value session.name "PHPSESSID_SITEBLAH"
    php_value session.gc_maxlifetime 57600
    php_value session.gc_probability 1
    php_value session.gc_divisor 500
Zoredache
fuente
Esto no parece funcionar para mí. ¿Hay algún tipo de directiva que deba establecerse en el php.ini maestro para permitir esto?
Brent
1
Para que esto funcione, las "Opciones de Permitir anulación" o "Permitir anular todo" deben establecerse en la configuración de APache.
StackKrish el
¿Los valores en, por ejemplo, apache.confsobrescribirían los de su php.iniarchivo o al revés?
puk
7

También puede especificar la configuración en el archivo de configuración de Apache (httpd.conf / apache.conf). En su caso, puede especificar los valores de configuración dentro del contexto.

El siguiente ejemplo debe establecer upload_max_filesize en 10M para el host virtual example.com.

<VirtualHost *>
    ServerName example.com
    DocumentRoot /path_to_docroot
    php_value upload_max_filesize 10M
    php_admin_flag allow_url_fopen on
</VirtualHost>

Si no desea establecer este valor para todo el sitio, sino para un directorio en particular donde vive la aplicación, puede especificar los valores dentro de a.

<VirtualHost *>
   ServerName example.com
   DocumentRoot /path_to_docroot
  <Location /testApp/>
     php_value upload_max_filesize 10M
     php_admin_flag allow_url_fopen on
  </Location>
</VirtualHost>

Ver http://php.net/manual/en/configuration.changes.php para más explicaciones.

StackKrish
fuente
+1 Extrañamente, nada más funcionó. Htaccess local, archivos php ini, nada de eso funcionó.
boot13
¡Gracias! Tal vez alguien se encuentra con el problema de que los parámetros de seguridad de mod deben ser sobrescritos. Esto solo funciona en el nivel de host no en el nivel de DIRECTORIO o LOCALIZACIÓN. La razón es que mod-sec se está configurando antes de que se lean los directorios o los bloques de ubicación.
ora-600
1

Otra sugerencia es usar mod-fastcgi o mod-fcgi, que ejecutan PHP como un demonio independiente por separado. Luego, para cada sitio web, puede definir un usuario separado y un archivo de configuración php.ini.

Walter
fuente
1

Otra opción es suPHP, que le permite definir un php.ini para cada VirtualHost. También le permite especificar una versión de PHP para cada VirtualHost.

Antoine Benkemoun
fuente