Wie richte ich pro-Site php.ini-Dateien auf einem LAMP-Server mit NameVirtualHosts ein?

10

Ich habe einen LAMP- Server, der mit NameVirtualHosts verschiedene Websites bedient .

Bis vor kurzem war es in Ordnung , eine globale php.ini- Datei zu haben, aber kürzlich hat einer unserer Entwickler einige Einstellungen in php.ini angefordert, die ich lieber nicht global festlegen möchte.

Ich bin mir ziemlich sicher, dass ich gehört habe, dass Sie php.ini-Dateien pro Site einrichten können , aber ich weiß nicht, wie ich das machen soll.

Kann mich jemand in die richtige Richtung weisen, wie dies erreicht werden kann?

Brent
quelle

Antworten:

14

Die meisten Einstellungen, die Sie in Ihrer php.ini vornehmen würden, können auch in einem .htaccess oder in der Apache-Konfiguration für diese Site platziert werden. Zum Beispiel hat einer meiner virtuellen Hosts dies im .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
quelle
Das scheint bei mir nicht zu funktionieren. Gibt es eine Art Direktive, die in der Master-php.ini festgelegt werden muss, um dies zu ermöglichen?
Brent
1
"AllowOverride Options" oder "AllowOverride All" sollten in der APache-Konfiguration festgelegt sein, damit dies funktioniert.
StackKrish
Würden die Werte in beispielsweise die Werte in apache.confIhrer php.iniDatei überschreiben oder umgekehrt?
Puk
7

Sie können Konfigurationseinstellungen auch in der Apache-Konfigurationsdatei (httpd.conf / apache.conf) angeben. In Ihrem Fall können Sie die Konfigurationswerte im Kontext angeben.

Im folgenden Beispiel sollte upload_max_filesize für den virtuellen Host example.com auf 10 MB festgelegt werden.

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

Wenn Sie diesen Wert nicht für die gesamte Site festlegen möchten, sondern für ein bestimmtes Verzeichnis, in dem sich die Anwendung befindet, können Sie die Werte in a angeben.

<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>

Weitere Erläuterungen finden Sie unter http://php.net/manual/en/configuration.changes.php .

StackKrish
quelle
+1 Seltsamerweise hat nichts anderes funktioniert. Lokaler htaccess, PHP-INI-Dateien, nichts davon funktionierte.
Boot13
Vielen Dank! Vielleicht stößt jemand auf das Problem, dass Mod-Sicherheitsparameter überschrieben werden müssen. Dies funktioniert nur auf der Ebene vhost, nicht auf der Ebene DIRECTORY oder LOCATION. Der Grund ist, dass mod-sec konfiguriert wird, bevor die Verzeichnisse oder Standortblöcke gelesen werden.
ora-600
1

Ein weiterer Vorschlag ist die Verwendung von mod-fastcgi oder mod-fcgi, die PHP als separaten eigenständigen Daemon ausführen. Anschließend können Sie für jede Website einen separaten Benutzer und eine separate Konfigurationsdatei für php.ini definieren.

Walter
quelle
1

Eine weitere Option ist suPHP , mit der Sie für jeden VirtualHost eine php.ini definieren können. Außerdem können Sie für jeden VirtualHost eine PHP-Version angeben.

Antoine Benkemoun
quelle