Como configurar arquivos php.ini por site em um servidor LAMP usando NameVirtualHosts?

10

Eu tenho um servidor LAMP que atende a vários sites diferentes usando o NameVirtualHosts .

Até recentemente, ter um arquivo php.ini global era bom, mas recentemente um de nossos desenvolvedores solicitou algumas configurações no php.ini que eu prefiro não definir globalmente.

Tenho certeza de que ouvi dizer que você pode configurar arquivos php.ini por site , mas não sabe como fazê-lo.

Alguém pode me indicar a direção certa de como fazer isso?

Brent
fonte

Respostas:

14

A maioria das configurações que você colocaria no seu php.ini também pode ser colocada em um arquivo .htaccess ou na configuração apache desse site. Por exemplo, um dos meus hosts virtuais tem isso no .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
fonte
Isso não parece funcionar para mim. Existe algum tipo de diretiva que precisa ser definida no php.ini mestre para permitir isso?
Brent
1
"AllowOverride Options" ou "AllowOverride All" devem ser definidas na configuração do APache para que isso funcione.
StackKrish
Os valores, por exemplo, apache.confsubstituiriam os do seu php.iniarquivo ou o contrário?
puk
7

Você também pode especificar as configurações no arquivo de configuração do Apache (httpd.conf / apache.conf). No seu caso, você pode especificar os valores de configuração dentro do contexto.

O exemplo a seguir deve definir upload_max_filesize como 10M para o 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>

Se você não deseja definir esse valor para todo o site, mas para um diretório específico em que o aplicativo reside, é possível especificar os valores em 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>

Veja http://php.net/manual/en/configuration.changes.php para mais explicações.

StackKrish
fonte
+1 Estranhamente, nada mais funcionou. Htaccess local, arquivos php ini, nada disso funcionou.
boot13
Obrigado! Talvez alguém se depare com o problema de que os parâmetros de segurança do mod precisam ser substituídos. Isso funciona apenas no nível do vhost que não está no nível DIRECTORY ou LOCATION. O motivo é que o mod-sec está sendo configurado antes da leitura dos diretórios ou blocos de localização.
precisa
1

Outra sugestão é usar o mod-fastcgi ou mod-fcgi, que executa o PHP como um daemon independente separado. Então, para cada site, você pode definir um usuário separado e um arquivo de configuração do php.ini.

Walter
fonte
1

Outra opção é o suPHP, que permite definir um php.ini para cada VirtualHost. Também permite que você especifique uma versão PHP para cada VirtualHost.

Antoine Benkemoun
fonte