Comment configurer des fichiers php.ini par site sur un serveur LAMP à l'aide de NameVirtualHosts?

10

J'ai un serveur LAMP desservant un certain nombre de sites Web différents utilisant NameVirtualHosts .

Jusqu'à récemment, avoir un fichier php.ini global était très bien, mais récemment l'un de nos développeurs a demandé des paramètres dans php.ini que je préfère ne pas définir globalement.

Je suis presque sûr d'avoir entendu dire que vous pouvez configurer des fichiers php.ini par site , mais je ne sais pas comment procéder.

Quelqu'un peut-il m'indiquer dans la bonne direction comment y parvenir?

Brent
la source

Réponses:

14

La plupart des paramètres que vous placeriez dans votre php.ini peuvent également être placés dans un .htaccess ou dans la configuration d'apache pour ce site. Par exemple, un de mes hôtes virtuels a ceci dans le .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
la source
Cela ne semble pas fonctionner pour moi. Existe-t-il une sorte de directive qui doit être définie dans le php.ini maître pour permettre cela?
Brent
1
"AllowOverride Options" ou "AllowOverride All" doit être défini dans la configuration APache pour que cela fonctionne.
StackKrish
Les valeurs de, par exemple, apache.confremplaceraient-elles celles de votre php.inifichier, ou l'inverse?
puk
7

Vous pouvez également spécifier des paramètres de configuration dans le fichier de configuration Apache (httpd.conf / apache.conf). Dans votre cas, vous pouvez spécifier les valeurs de configuration dans le contexte.

L'exemple suivant doit définir upload_max_filesize sur 10M pour l'hôte virtuel 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 vous ne souhaitez pas définir cette valeur pour l'ensemble du site, mais dans un répertoire particulier où réside l'application, vous pouvez spécifier les valeurs dans 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>

Voir http://php.net/manual/en/configuration.changes.php pour plus d'explications.

StackKrish
la source
+1 Bizarrement, rien d'autre n'a fonctionné. Htaccess local, fichiers php ini, rien de tout cela n'a fonctionné.
boot13
Merci! Peut-être que quelqu'un rencontre le problème que les paramètres de sécurité du mod doivent être remplacés. Cela ne fonctionne qu'au niveau de l'hôte, pas au niveau RÉPERTOIRE ou LOCALISATION. La raison en est que mod-sec est en cours de configuration avant la lecture des répertoires ou des blocs d'emplacement.
ora-600
1

Une autre suggestion consiste à utiliser mod-fastcgi ou mod-fcgi, qui exécutent PHP en tant que démon autonome distinct. Ensuite, pour chaque site Web, vous pouvez définir un fichier de configuration utilisateur et php.ini distinct.

Walter
la source
1

Encore une autre option est suPHP qui vous permet de définir un php.ini pour chaque VirtualHost. Il vous permet également de spécifier une version PHP pour chaque VirtualHost.

Antoine Benkemoun
la source