За какво служи php.ini файла?

Помощен център

За какво служи php.ini файла?

Всеки хостинг сървър е настроен да работи с оптимални стойности, за да може да доставя успешно нужните ресурси на сайтовете, инсталирани от хостинг потребителите.

Може да се каже дори, че подхода на системните администратори често е умишлено консервативен по отношение на ресурси и права за да се постигне много високо ниво на сигурност и надежност в работата на хостинг сървърите.

Основен (default) php.ini файл

Казаното дотук в пълна сила важи и за конфигурационните настройки на PHP.

Конфигурационният файл на PHP, php.ini, е последният и най-непосредствен начин да се повлияе върху функционалността на PHP. Файлът php.ini се чете от уеб сървъра всеки път, когато PHP се зарежда (initialize).

PHP настройките не са тайна и вие може да ги видите ако създадете .php файл с произволно име (не улеснявайте хакерите, като именувате файла phpinfo.php), който съдържа само PHP функцията phpinfo() и заредите файла в браузер:

php ini file

Тази функция показва всички PHP настройки, а параметрите Configuration File (php.ini) Path и Loaded Configuration File показват къде се намира основния php.ini файл и дали неговите стойности за заредени в момента:

php ini file

Може би се чудите защо са необходими две настройки, които показват едно и също нещо?

Персонализиран php.ini файл

Защото PHP дава възможност потребителя да създава собствен php.ini файл в директорията на хостинга, чрез който да променя основните конфигурационни параметри на PHP.

Именно заради тази изключително полезна и важна особеност в началото споменахме, че настройките по подразбиране понякога са занижени - потребителя има възможност да персонализира параметрите според нуждите на собствените си сайтове.

Създаваме php.ini файл в директория public_html, въвеждаме различна стойност за параметъра memory_limit и рефрешваме файла (в примера confp.php), който съдържа функцията phpinfo():

php ini file

Параметъра Loaded Configuration File вече посочва пътя до създадения от нас php.ini файл, което означава, че всички промени в този файл ще пренапишат стойностите по подразбиране в основния php.ini файл.

memory_limit = 128M е стойността по подразбиране в основния php.ini файл:

php ini file

memory_limit = 138M е стойността в създадения от нас php.ini файл:

php ini file

php.ini файловете нямат рекурсивно действие по подразбиране

Настройките на PHP, определени във файла php.ini, не са рекурсивни по подразбиране - те не променят настройките в своите поддиректории.

Нека проверим дали това е вярно.

Копираме файла confp.php в поддиректория icn-demo.net, към която е конфигуриран домейна icn-demo.net и зареждаме URL адреса http://icn-demo.net/confp.php:

php ini file

Въпреки, че в 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 file

Създаване на рекурсивен 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 file

Сега в поддиректорията се зареждат настройките на php.ini файла от public_html, въпреки че в нея има създаден php.ini файл с код memory_limit = 148M:

php ini file

Сега се изправяме пред интересен проблем: възможно ли е php.ini в public_html да има рекурсивно действие в целия хостинг, но при нужда в отделни директории да ползваме различен php.ini файл?

Да, трябва да създадем във въпросната директория .htaccess файл, в който вместо пътя до рекурсивния php.ini файл да въведем пътя до локалния php.ini файл:

SetEnv PHPRC /home/cpaneluser/public_html/icn-demo.net/php.ini

php ini file

php ini file

За да може по-лесно да се разберат примерите по-горе ще добавим следните разяснения:

  • основния php.ini файл се зарежда от public_html когато в нея няма персонализиран php.ini файл; memory_limit = 128M; зарежда се от URL http://example.net/confp.php;
  • персонализиран php.ini файл в public_html - memory_limit = 138M; зарежда се от URL http://example.net/confp.php;
  • персонализиран php.ini файл в /public_html/icn-demo.net - memory_limit = 148M; зарежда се от URL http://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 настройки.