За какво служи php.ini файла?
Съдържание
Всеки хостинг сървър е настроен да работи с оптимални стойности, за да може да доставя успешно нужните ресурси на сайтовете, инсталирани от хостинг потребителите.
Може да се каже, че често подходът на системните администратори е умишлено консервативен по отношение на ресурсите и правата именно, за да се постигне много високо ниво на сигурност и надеждност в работата на хостинг сървърите.
Основен (default) php.ini файл
Казаното дотук в пълна сила важи и за конфигурационните настройки на PHP.
Конфигурационният файл на PHP, php.ini, е последният и най-непосредствен начин да се повлияе върху функционалността на PHP. Файлът php.ini
се чете от уеб сървъра всеки път, когато PHP се зарежда (initialize).
PHP настройките не са тайна и вие може да ги видите, ако създадете .php
файл с произволно име (в никакъв случай не улеснявайте хакерите като именувате файла phpinfo.php), който съдържа само PHP функцията phpinfo()
и заредите файла в браузър:
Тази функция показва всички PHP настройки, а параметрите Configuration File (php.ini) Path и Loaded Configuration File показват къде се намира основният php.ini
файл и дали неговите стойности са заредени в момента:
Може би се чудите защо са необходими две настройки, които показват едно и също нещо?
Персонализиран php.ini файл
Това е така, защото PHP дава възможност на потребителя да създава собствен php.ini
файл в директорията на хостинга, чрез който да променя основните конфигурационни параметри на PHP.
Именно заради тази изключително полезна и важна особеност в началото споменахме, че настройките по подразбиране понякога са занижени - потребителят има възможност да персонализира параметрите според нуждите на собствените си сайтове.
Създайте php.ini
файл в директория public_html
, въведете различна стойност за параметъра memory_limit
и рефрешнете файла (в примера confp.php
), който съдържа функцията phpinfo()
:
Параметърът Loaded Configuration File вече посочва пътя до създадения php.ini
файл, което означава, че всички промени в този файл ще пренапишат стойностите по подразбиране в основния php.ini
файл.
memory_limit = 128M
е стойността по подразбиране в основния php.ini
файл:
memory_limit = 138M
е стойността в създадения php.ini
файл:
php.ini файловете нямат рекурсивно действие по подразбиране
Настройките на PHP, определени във файла php.ini
, не са рекурсивни по подразбиране - те не променят настройките в своите поддиректории.
Нека проверим дали това е вярно.
Копираме файла confp.php
в поддиректория icn-demo.net
, към която е конфигуриран домейнът icn-demo.net
и зареждаме URL адреса http://icn-demo.net/confp.php
:
Въпреки, че в public_html
има създаден php.ini
файл, неговите настройки не се отчитат в поддиректорията icn-demo.net
и за нея важат основните настройки на PHP.
Ако желаем да имаме персонализирани настройки в директория icn-demo.net
трябва да създадем php.ini
файл в нея. За да тестваме, създаваме php.ini
файл с код: memory_limit = 148M
и опресняваме (с клавиша F5) URL адреса http://icn-demo.net/confp.php
:
Създаване на рекурсивен php.ini файл
Ако желаете персоналните настройки на php.ini
файла в public_html
да са валидни за всички сайтове в хостинга, трябва да добавите следния код в .htaccess
файл в public_html
:
SetEnv PHPRC /home/cpaneluser/public_html/php.ini
Без да променяме нищо от предишния пример създаваме горния запис и рефрешваме http://icn-demo.net/confp.php
:
Сега в поддиректорията се зареждат настройките на php.ini
файла от public_html
, въпреки че в нея има създаден php.ini
файл с код memory_limit = 148M
:
Сега се изправяме пред интересен проблем: възможно ли е php.ini
в public_html
да има рекурсивно действие в целия хостинг, но при нужда в отделни директории да ползваме различен php.ini
файл?
Да, трябва да създадем във въпросната директория .htaccess
файл, в който вместо пътя до рекурсивния php.ini
файл, да въведем пътя до локалния php.ini
файл:
SetEnv PHPRC /home/cpaneluser/public_html/icn-demo.net/php.ini
За да може по-лесно да се разберат примерите по-горе, ще добавим следните разяснения:
- основният
php.ini
файл се зарежда отpublic_html
, когато в нея няма персонализиранphp.ini
файл;memory_limit = 128M
; зарежда се от URLhttp://example.net/confp.php
; - персонализиран
php.ini
файл вpublic_html
-memory_limit = 138M
; зарежда се от URLhttp://example.net/confp.php
; - персонализиран
php.ini
файл в/public_html/icn-demo.net
-memory_limit = 148M
; зарежда се от URLhttp://icn-demo.net/confp.php
;
Синтаксис на php.ini файл
Има някои особености при работа с php.ini
файл, с които ще ви запознаем накратко:
- директивите (параметрите) са чувствителни към регистъра (главни и малки букви), докато стойностите на директивите не са;
- директивите и стойностите се разделят със знак за равенство (=);
- празни интервали и линии се игнорират;
- всеки текст след точка и запетая (;) на същия ред се игнорира;
- маркерите на секции - текст в квадратни скоби [php], също се игнорират;
- низовете се ограждат в двойни кавички - include_path = ".:/usr/local/lib/php";
- булевите (Boolean) стойности могат да бъдат зададени като:
true, оn, yes
;false, оff, no, none
.
Примери:
; това е коментар, който се игнорира
memory_limit = 8M ; този текст също се игнорира
register_globals = оff
Важно: когато въвеждате директиви (параметри) в персонализиран php.ini файл, препоръчаме винаги да ги копирате заедно със стойностите от браузъра, за да не допуснете грешка при писане.
Надяваме се, че информацията в тази статия ще ви помогне по-лесно да създавате и управлявате вашите персонализирани PHP настройки.