Tag: php.ini

Własny plik php.ini – przykłady

Własny plik php.ini – przykłady

Do sprawdzenia ustawień skorzystamy w pliku phpinfo.php w którym powinien znaleźć się kod:

<?php
phpinfo();
?>

Następnie wywołujemy go za pomocą przeglądarki i wyświetlą nam się wszystkie ustawienia.

Wszystko co jest tutaj opisane wykonujemy w jednym katalogu, najlepiej głównym katalogu domeny.

Zaczynamy od odczytania wartości Server API z pliku phpinfo.php. Następnie kierując się nią wybieramy metody dla Apache, CGI lub FastCGI (jeśli widoczne jest tam CGI/FastCGI to jest to FastCGI)

Aktualny plik php.ini i wszystkie dyrektywy: Najnowszy php.ini ze wszystkimi dyrektywami
Spis dyrektyw razem z ich typem: Lista dyrektyw php.ini

Informacja: Wszelkie ustawienia dziedziczą podkatalogi

PHP uruchamiane jako moduł Apache

php.ini w głównym katalogu

Stwórz po prostu plik php.ini w głównym katalogu w którym znajduje się phpinfo.php a do pliku php.ini wklej:

memory_limit =13M

Następnie wywołaj plik phpinfo.php lub odśwież stronę i sprawdź czy wartość memory_limit wynosi 13, jeśli nie lub wyskoczył ci błąd 500 usuń plik php.ini
Jeśli wyświetliła się wartość 13 to możesz zmieniać dowolne dyrektywy za pomocą tego pliku.

Za pomocą pliku .htaccess

To zadziała jeśli php jest uruchomiony jako moduł Apache. Otwórz plik .htaccess, jeśli nie istnieje to go stwórz, w głównym katalogu tam gdzie phpinfo.php i dodaj w nim linijkę:

php_value memory_limit 13M

Następnie wywołaj plik phpinfo.php lub odśwież stronę i sprawdź czy wartość memory_limit wynosi 13, jeśli nie lub wyskoczył ci błąd 500 usuń plik php.ini
Jeśli wyświetliła się wartość 13 to możesz zmieniać dowolne dyrektywy za pomocą tych wpisów.
Dla wartości logicznych służy:

php_flag name on|off

np.:

php_flag magic_quotes_runtime off

PHP uruchamiane jako CGI lub FastCGI

Często php jest uruchamiane jako FastCGI lub CGI dla obydwóch typów metoda wczytania własnego php.ini jest taka sama, więc zaczynamy od utworzenia pliku o nazwie np. file.php do którego wklejamy taki kod:

<?php
echo dirname(__FILE__).'/php.ini';
?>

Wgrywamy go do głównego katalogu i wywołujemy, następnie wyświetli nam się ścieżka podobna do:

/home/tosiek/domains/tosiek.pl/public_html/php.ini

Kopiujemy ją sobie. Potem odszukujemy skryptu FastCGI lub CGI za którego pomocą jest uruchamiany interpreter PHP, najczęściej znajduje się w katalogu /cgi-bin/ no pod nazwą php-fcgi lub php-cgi. Ściągamy ten plik na dysk i otwieramy dowolnym edytorem, treść będzie podobna do tej:

#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec /user/htdocs/cgi-bin/php5.cgi

Pierwsza możliwość – dodanie parametru -c

Modyfikujemy linijkę exec /user/htdocs/cgi-bin/php5.cgi dodając parametr -c ze ścieżką do pliku php.ini (odczytaną z pliku file.php):

#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec /user/htdocs/cgi-bin/php5.cgi -c /home/tosiek/domains/tosiek.pl/public_html/php.ini

Zapisujemy ten plik i wgrywamy na serwer.

Druga możliwość – ustawienie zmiennej środowiskowej PHPRC

Przed linijką exec /user/htdocs/cgi-bin/php5.cgi dodajemy linijkę:

export PHPRC=/home/tosiek/domains/tosiek.pl/public_html/php.ini

oczywiście wartość PHPRC zastępujemy wartością odczytaną z pliku file.php.
Gotowy plik powinien podobnie wyglądać:

#!/bin/sh
export PHP_FCGI_CHILDREN=3
export PHPRC=/home/tosiek/domains/tosiek.pl/public_html/php.ini
exec /user/htdocs/cgi-bin/php5.cgi

Zapisujemy ten plik i wgrywamy na serwer.

Niezależnie od metody w folderze w którym utworzyliśmy plik file.php tworzymy plik php.ini do pliku php.ini wklej:

memory_limit =13M

Następnie wywołaj plik phpinfo.php lub odśwież stronę i sprawdź czy wartość memory_limit wynosi 13, jeśli nie lub wyskoczył ci błąd 500 usuń plik php.ini
Jeśli wyświetliła się wartość 13 to możesz zmieniać dowolne dyrektywy za pomocą tego pliku.

Wartość dla Loaded Configuration File powinna być taka jak odczytana z pliku file.php

Własny plik konfiguracyjny php php.ini

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().