Własny plik konfiguracyjny php php.ini

Czasami zachodzi potrzeba zmiany ustawień interpretera PHP .

Aktualne ustawienia, moduły, aktualną lokalizację pliku php.ini możemy obejrzeć za pomocą phpinfo(), więc tworzymy sobie np. plik o nazwie phpinfo.php a do niego wpisujemy taki kod:

<?php
phpinfo();
?>

Następnie wywołujemy go w przeglądarce i otrzymujemy wszelkie potrzebne informacje.

Plik konfiguracyjny

Plik konfiguracyjny (php.ini) jest wczytywany podczas startu PHP. Na serwerze z modułem PHP dzieję się to tylko raz, podczas startu serwera. Dla wersji CGI oraz CLI, jest wczytywany przy każdym wywołaniu.

php.ini jest wyszukiwany w następujących lokalizacjach (w takiej kolejności):

  • SAPI określonej lokalizacji modułu
    • PHPIniDir dyrektywa w Apache 2
    • -c opcja linii komend w CGI oraz CLI
    • php_ini parametr w NSAPI
    • PHP_INI_PATH zmienna środowiskowa w THTTPD
  • PHPRC zmienna środowiskowa. Przed PHP 5.2.0 było to sprawdzane po kluczu poniżej.
  • W PHP 5.2.0, lokalizację pliku php.ini można ustawić dla różnych wersji PHP. Następujące klucze rejestru sprawdzane są w takiej kolejności: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] i [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], gzie x, y i z oznaczają PHP major, minor and release wersje. Jeśli istnieje wartość IniFilePath w tych kluczach, wtedy pierwszy znaleziony zostanie użyty jako lokalizacja php.ini (Tylko Windows).
  • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], wartość IniFilePath (Tylko Windows).
  • Bieżący roboczy katalog (z wyjątkiem CLI)
  • W katalogu internetowym serwera (dla modułów SAPI), lub katalog PHP (otherwise w Windows)
  • Katalogu Windows (C:\windows or C:\winnt) (dla Windows), lub –with-config-file-path opcja w czasie kompilacji

Jeśli php-SAPI.ini istnieje (gdzie SAPI jest używane SAPI, więc nazwą jest np. php-cli.ini lub php-apache.ini), jest używane zamiast php.ini. Nazwa SAPI może być ustalona przez php_sapi_name().

Informacja: Apache Web Server zmienia katalog główny na starcie powodując że PHP próbuje odczytać php.ini z katalogu głównego systemu plików, jeśli istnieje.

Od PHP 5.1.0, możliwe jest odwoływaniue się do innych .ini zmiennych z innego pliku .ini. Przykład: open_basedir = ${open_basedir} “:/new/dir”.

Pliki .user.ini

Od PHP 5.3.0, PHP obsługuje pliki .htaccess-style INI w podstawowym katalogu. Pliki te przetwarzane są wyłącznie przez CGI/FastCGI SAPI. Ta funkcjonalność wymaga / nieaktualna rozszerzenia PECL htscanner. Jesli używasz Apache, użyj pliku .htaccess dla takiego samego efektu.

Oprócz głównego pliku php.ini, PHP skanuje pliki INI w każdym katalogu, począwszy od aktualnego katalogu aktualnie wywołanego pliku PHP, i będzie działać aż do aktualnego dokumentu głównego (jak w $_SERVER[‘DOCUMENT_ROOT’]). Tylko ustawienia INI w trybie PHP_INI_PERDIR oraz PHP_INI_USER zostanie rozpoznane w .user.ini-style pliku INI.

Dwie nowe dyrektywy INI, user_ini.filename oraz user_ini.cache_ttl można kontrolować poprzez INI.

user_ini.filename ustawia nazwę pliku którego PHP szuka w każdym katalogu; jesli jest puste, PHP nie szuka w ogóle. Domyślnie jest to .user.ini.

user_ini.cache_ttl kontroluje co jaki czas plik jest ponownie wczytywany. Domyslnie jest 300 sekund (5 minut).

W jakich miejscach jaka konfiguracja może być ustawiona

Te tryby określają kiedy i gdzie może być lub nie odpowiednia dyrektywa, każda dyrektywa odnosi się do jednego z tych trybów. Dla przykładu, niektóre ustawienia moga być zmienione w skrypcie PHP za pomocą ini_set(), natomiast inne moga wymagać php.ini lub httpd.conf.

Dla przykładu, output_buffering ustawione jest na PHP_INI_PERDIR dlatego nie może być ustawione za pomocą ini_set(). Jednakże, display_errors directive jest PHP_INI_ALL dlatego może być ustawione wszędzie, w tym także w ini_set().

  • PHP_INI_USER – Wpis moze być zmieniony w skrypcie użytkownika (np. za pomocą ini_set()) lub w rejestrze systemu Windows
  • PHP_INI_PERDIR – Wpis może być zmieniony w php.ini, .htaccess lub httpd.conf
  • PHP_INI_SYSTEM – Wpis może być zmieniony w php.ini or httpd.conf
  • PHP_INI_ALL Wpis może być zmieniony wszędzie

Jak zmienić ustawienia konfiguracyjne

Uruchamianie PHP jako moduł Apache

Korzystając z PHP jako modułu Apache, możesz również zmienić ustawienia za pomocą dyrektyw w plikach konfiguracyjnych Apache(np. httpd.conf) oraz pliki .htaccess. Potrzebne są do tego uprawnienia “AllowOverride Options” lub “AllowOverride All.

Istnieje kilka dyrektyw Apache, które pozwalają na zmianę konfiguracji PHP w plikach konfiguracyjnych Apache. W poszukiwaniu które dyrektywy są PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM zajrzyj do dodatku: Lista dyrektyw PHP php.ini

php_value name value
Ustawia wartość określonej dyrektywy. Może być użyty tylko z typem dyrektywy PHP_INI_ALL oraz PHP_INI_PERDIR. Aby usunąć wcześniej ustaloną wartość wykorzystaj none jako wartość.

Informacja: Nie używaj php_value do ustawiania wartości logicznych. php_flag (patrz niżej) powinny być do tego stosowane.

php_flag name on|off
Służy do ustawiania dyrektyw z wartościami logicznymi. Może być użyty tylko z typem dyrektywy PHP_INI_ALL oraz PHP_INI_PERDIR.

php_admin_value name value
Ustawia wartość określonej dyrektywy. Nie może być użyte w pliku .htaccess. Żadna dyrektywa ustawiona poprzez php_admin_value nie może być zmieniona przez .htaccess lub ini_set(). Aby usunąć wcześniej ustaloną wartość wykorzystaj none jako wartość.

php_admin_flag name on|off
Służy do ustawiania dyrektyw z wartościami logicznymi. Nie może być użyte w pliku Żadna dyrektywa ustawiona poprzez php_admin_value nie może być zmieniona przez .htaccess.

Przykład:

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>

Zmiana konfiguracji PHP z rejestru systemu Windows

Jeśli PHP jest uruchomione w Windows, konfiguracja może być zmieniana w głównym katalogu za pomocą rejestru Windows. Wartości konfiguracji przechowywane są w kluczu HKLM\SOFTWARE\PHP\Per Directory Values, w pod kluczach odpowiadające nazwy. Dla przykładu, wartości konfiguracji dla katalogu c:\inetpub\wwwroot będą przechowywane w kluczu HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot. Te ustawienia będą aktywne dla każdego skryptu uruchomionego z tego katalogu lub każdego podkatalogu. Wartość klucza ma taką samą nazwę jak dyrektywa PHP i jego ciąg wartości. Stałe PHP nie są analizowane. Jednakże, można zmieniać tylko dyrektywy PHP_INI_USER za pomocą tego sposobu, wartości PHP_INI_PERDIR już nie można.

Inne interfejsy PHP

Niezależnie od sposobu uruchamiania PHP, niektóre wartości można zmienić podczas uruchamiania skryptu za pomocą ini_set(). Zobacz dokumentację ini_set() aby dowiedzieć się więcej. – Dokumentacja funkcji ini_set()
Jesli interesuje Cię całkowita konfiguracha, możesz użyć funkcji phpinfo(), i zobaczyć stronę z całkowita konfiguracją. Można również uzyskać dostęp do wartości poszczególnych dyrektyw konfiguracyjnych podczas wykonywania skryptu PHP za pomocą ini_get() lub get_cfg_var().