Jak skonfigurować pliki php.ini dla witryny na serwerze LAMP przy użyciu NameVirtualHosts?

10

Mam serwer LAMP obsługujący wiele różnych stron internetowych przy użyciu NameVirtualHosts .

Do niedawna posiadanie globalnego pliku php.ini było w porządku, ale ostatnio jeden z naszych programistów poprosił o pewne ustawienia w php.ini, których wolałbym nie ustawiać globalnie.

Jestem prawie pewien, że słyszałem, że możesz skonfigurować pliki php.ini dla poszczególnych witryn , ale nie wiem, jak to zrobić.

Czy ktoś może wskazać mi właściwy kierunek, jak to osiągnąć?

Brent
źródło

Odpowiedzi:

14

Większość ustawień, które umieścisz w pliku php.ini, można również umieścić w pliku .htaccess lub w konfiguracji apache dla tej witryny. Na przykład jeden z moich wirtualnych hostów ma to w .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
źródło
Wydaje mi się, że to nie działa. Czy istnieje jakaś dyrektywa, która musi zostać ustawiona w głównym php.ini, aby na to pozwolić?
Brent
1
Aby to działało, należy ustawić „AllowOverride Options” lub „AllowOverride All”.
StackKrish
Czy wartości na przykład apache.confzastąpiłyby wartości w twoim php.inipliku lub odwrotnie?
puk
7

Możesz także określić ustawienia konfiguracji w pliku konfiguracyjnym Apache (httpd.conf / apache.conf). W twoim przypadku możesz określić wartości konfiguracji w kontekście.

Poniższy przykład powinien ustawić upload_max_filesize na 10M dla wirtualnego hosta example.com.

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

Jeśli nie chcesz ustawiać tej wartości dla całej witryny, ale dla jednego konkretnego katalogu, w którym mieszka aplikacja, możesz określić wartości w.

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

Więcej informacji można znaleźć na stronie http://php.net/manual/en/configuration.changes.php .

StackKrish
źródło
+1 Dziwnie, nic więcej nie działało. Lokalny plik htaccess, pliki php ini, żaden z nich nie działał.
boot13
Dzięki! Być może ktoś natknie się na problem polegający na zastąpieniu parametrów mod-security. Działa to tylko na poziomie vhosta, a nie na poziomie DIRECTORY lub LOCATION. Powodem jest to, że mod-sec jest konfigurowany przed odczytem katalogów lub bloków lokalizacji.
ora-600
1

Inną sugestią jest użycie mod-fastcgi lub mod-fcgi, które uruchamiają PHP jako osobny autonomiczny demon. Następnie dla każdej witryny możesz zdefiniować osobny plik konfiguracyjny użytkownika i php.ini.

Walter
źródło
1

Jeszcze inną opcją jest suPHP, która pozwala zdefiniować php.ini dla każdego VirtualHost. Pozwala także określić wersję PHP dla każdego VirtualHost.

Antoine Benkemoun
źródło