Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » PHP: секреты файла php.ini

 

PHP: секреты файла php.ini

 

 

Если спросить веб-программиста, какой из всех файлов дистрибутива PHP является самым главным, многие могут ответить, что сам интерпретатор, библиотеки, расширения и т. д. Нет, самый важный файл — это php.ini: небольшой текстовый файлик, в котором содержатся все настройки РНР (директивы), конфигурации модулей расширения и переменные среды. Через файл конфигурации можно настроить РНР на максимальное быстродействие, отключить потенциально опасные функции и модули, ну и, конечно, при неудачной настройке нарушить работу всей системы (нет, не всего сервера, максимум веб-сервера и РНР).

Но значение системных переменных можно установить не только через php.ini, но и другии методами, правда, с ограничениями.

загрузка...

 

 

Для понимания этого следует вкратце рассмотреть механизм обработки конфигурационных файлов средой РНР.

Во первых, в самом простом случае, когда РНР работает как CGI-приложение, файл перечитывается каждый раз при запуске интерпретатора. Если же он подключается как SAPI-модуль к серверу Apache, то тогда путь к файлу определяется директивой PHPIniDir конфигурации сервера.

Если после этого конфигурационный файл не найден, его поиски продолжаются в следующих местах: для Win32-сервера проверяется ключ в реестре HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath, далее файл ищется в текущем каталоге, откуда запущен интерпретатор (php-cli.exe), в корневой директории веб-сервера (для SAPI-модуля) или в корневой директории РНР. Потом поиск продолжается в системных директориях (C:\WINDOWS, C:\WINXP, C:\SYSTEM32) и в директории, заданной на этапе сборки РНР опцией '--with-config-file-path'.

Кроме этого, сами опции могут указыватся в разных файлах, к примеру в файлах конфигурации сервера Apache (httpd.conf), в файлах .htaccess (для отдельных директорий сайта), в отдельных файлах php.ini, помещаемых в директории со скриптами, и даже в самих РНР-скриптах через вызов функции ini_set(). В зависимости от того, где и каким образом устанавливается переменная, она будет иметь различный эффект – для текущего скрипта, для отдельного сайта или директории, для всего сервера до перезагрузки.

Для чего такое разнообразие? Очень просто. К примеру, в типичной ситуации, когда ваш сайт располагается на виртуальном хостинге, вы лишены возможности перенастроить конфигурацию РНР для себя, в то же время для нормальной работы скриптов вам необходимо установить некоторые переменные, отличные от установок хостера. Тогда вы просто устанавливаете в директориях своего сайта файл php.ini, в котором и прописываете все нужные вам настроки. Если же необходимо изменить всего одну-две переменные, то это можно сделать через вызов функции ini_set() в начале скрипта. Но обратите внимание на один момент. Так как ini_set() является РНР-функцией и, соответственно, исполняется уже после инициализации интерпретатора, то некоторые установки будут проигнорированы, так как влияют на работу только в начальном этапе запуска РНР. Не переживайте, такие параметры, как и ошибочные (синтаксически) неверные, будут просто проигнорированы и не приведут к каким-либо последствиям в работе.

Приведем практический пример. Есть такая директива, error_reporting, которая указывает на степень детализации вывода сообщений про ошибки в ходе интерпретации РНР-скрипта. Ее можно настроить на вывод как всех сообщений, так и просто предупреждений, не влияющих на работу программы. Вы можете для себя перенастроить ее, к примеру, разрешая показывать только критические для выполнения ошибки. В таком случае переменная должна содержать значение "E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR" – то есть выводить ошибки компилятора, критические ошибки среды и ядра. Установить переменную можно с помощью вызова функции ini_set(), которая принимает два строковых параметра: первая строка описывает название опции, а вторая – новое значение. В нашем случае это: ini_set('error_reporting', 'E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR'); . Вот и все, в результате РНР будет при каждом запуске вашего скрипта использовать новое значение переменной error_reporting, для всех остальных же пользователей останется значение по умолчанию, описанное в php.ini.

Прежде чем замещать переменную среды, желательно проверить ее текущее значение – это делается с помощью вызова функции ini_get(), которая принимает один параметр, строку с именем переменной, и возвращает строку с ее текущим значением. В нашем примере код echo ini_get('error_reporting'); вернет E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR, то есть только что установленное значение, в то же время, если вызвать ini_get() до установки нового значения, мы получим что-то вроде E_ALL & ~E_NOTICE (на разных хостингах может отличатся) – выводить сообщения про все ошибки, исключая предупреждения.

Но, перед тем как устанавливать переменные, желательно ориентироватся в структуре файла php.ini и в доступных параметрах. На эту тему мало информации, кроме комментариев в самом php.ini, так что мы постараемся подробно описать самые важные переменные, с которыми вам предстоит иметь дело.

Общая структура файла php.ini очень простая. Делится весь файл на секции, каждая секция группирует переменные, относящиеся к какому-либо модулю или всей среде РНР в целом. В каждой секции переменные (директивы) задаются в виде имя_переменной=значение, где значение может быть как произвольной строкой (если она содержит пробелы, то заключается в двойные кавычки), так и значением Оn/Оff (тогда такую переменную называют еще флагом). Переменные задаются по одной в строке, а все строки, которые начинаются со знака ';', воспринимаются как комментарии и не обрабатываются. Помните, что имена директив чувствительны к регистру и в основном пишутся строчными буквами.

Название секции заключается в квадратные скобки. К примеру, первой идет секция общих установок среды – [PHP]. Секция модуля ODBC для связи с базами данных имеет название [ODBC], настройки доступа к MySQL производятся в секции [MySQL], а новый интерфейс MySQLI настраивается в [MySQLI], параметры сессий указываются в секции [Session]. Каждая секция, исключая общесистемную, соответствует какому-либо расширению, если оно, конечно, нуждается в настройке.

Пока начнем с директив, описываемых в секции [PHP]. Мы будем рассматривать конфигурацию РНР версии 5.0.х, так что, если у вас более ранняя версия, некоторые директивы могут отсутствовать.

engine = [On/Off] — флаг, разрешающий работу РНР на сервере Apache. По умолчанию она всегда установлена в значение On.

zend.ze1_compatibility_mode = [Off/On] — директива появилась в РНР 5.0 и позволяет переключиться в режим совместимости со скриптами, написанными для предыдущих версий. Если вы настраиваете РНР под себя и вам не надо поддерживать совместимость, установите флаг в Off, если же РНР настраивается для общего сервера, то логично позволить пользователям запускать все скрипты, написанные с учетом ядра Zend I (PHP 4.х).

short_open_tag = [On/Off] — РНР умеет распознавать несколько различных тегов начала и конца блока программы. Этот флаг разрешает применять короткую запись вида <? php-код ?>.

precision = [12/любое число] — указывает, сколько значащих цифр должен учитывать РНР при операции с дробными числами. По умолчанию используется 12 знаков, чего вполне достаточно.

output_buffering = [Off/On/целое число] — разрешает буферизацию вывода для всех страниц или устанавливает размер буфера в байтах (если значение – целое число, к примеру 4096, устанавливает размер буфера в 4 Кб). Применяется для временной буферизации HTTP-заголовков и cookie перед отсылкой клиенту остального контента.

output_handler = [mb_output_handle/ob_gzhandler/пользовательская функция] — позволяет указать функцию для перенаправления всего вывода страницы. Одновременно, если задана функция, включается директива output_buffering. Можно использовать для перекодировки генерируемого контента, сжатия, кеширования или другой пост-обработки. Если директива не используется, присвойте ей пустое значение (пустую строку или значение none).

safe_mode = [Off/On] — переключает РНР в специальный защищенный режим работы, который имеет повышенную безопасность, но и накладывает ограничения на программирование. Может быть очень полезно при создании систем с повышенной защищенностью. С этой директивой связано еще несколько других с названием, начинающимся с safe_mode_, задающих конкретные ограничения и дополнительные проверки. По умолчанию директива имеет значение Off.

disable_functions = [none/перечень функций] — задает перечень функций, использование которых запрещено в пользовательских скриптах. Может применяться для дополнительного обеспечения безопасности, блокируя потенциально опасные функции (например, системные вызовы). Для задания функций перечислите их в двойных кавычках через запятую. Например, «exec,php_info,file,ini_set» запрещает вызовы функций exec(), php_info(), file(), ini_set(). Но устанавливать эту директиву можно только до инициализации РНР, то есть в файле php.ini или httpd.conf.

max_execution_time = [30/целое число] — указывает время в секундах, в течение которого можно исполнять один скрипт. При превышении лимита исполнение скрипта принудительно завершается с ошибкой. Это может пригодиться для принудительной остановки неправильно написанных программ, которые будут мешать нормальной работе сервера. В то же время не следует устанавливать слишком маленькое время, так как в случае работы с удаленными хостами, базами данных или файлами отведенное время может истечь до того, как скрипт отработает.

max_input_time = [-1/целое число] — указывает время в секундах, в течение которого скрипт может выводить данные. Желательно не устанавливать его меньше директивы max_execution_time. Если скрипт интенсивно выводит данные, к примеру в цикле что-то обрабатывает и выводит большие фрагменты текста, то директиве следует присваивать большие значения или же не устанавливать совсем – тогда единственным ограничением будет общее время исполнения скрипта. Директиву можно установить только через php.ini.

memory_limit = [8M/целое числоM/К] — устанавливает размер оперативной памяти, выделяемой для одного скрипта. Префикс М указывает, что размер указывается в мегабайтах, а К – Кб. Для публичного сервера (к примеру, виртуального хостинга) можно установить меньшее значение, но, если необходимо производить интенсивные вычисления или планируется запуск серьезных коммерческих программ, значение можно увеличить (зависит от размера RAM на сервере).

display_errors = [On/Off] — разрешает выводить пользователю сообщения про ошибки среды исполнения и предуприждения РНР. Я бы рекомендовал всегда включать эту директиву не только в режиме отладки, но и в реальной работе, а более точно настраивать детализацию вывода при помощи опции error_reporting.

error_reporting = [набор предопределенных констант] — указывает желательную детализацию сообщений про ошибки и сбои в работе интерпретатора.

Константы могут обьединяться при помощи битовых операторов сложения. Наиболее важные константы: E_ALL (все ошибки и предупреждения), E_COMPILE_ERROR (фатальные ошибки компилятора), E_CORE_ERROR (фатальные ошибки при инициализации ядра РНР), E_ERROR (фатальные ошибки этапа выполнения), E_PARSE (ошибки синтаксиса), E_NOTICE и E_WARNING (предупреждения на этапе выполнения, не критичные для работы скрипта).

Для отладки скрипта желательно установить максимальную детализацию сообщений, например error_reporting = E_ALL, в реальной работе желательно исключить предупреждения, не влияющие на работу, например error_reporting = E_COMPILE_ERROR|E_CORE_ERROR|E_ERROR покажет только фатальные ошибки (другой вариант: error_reporting = E_ALL & ~E_NOTICE & ~ E_WARNING).

Ссылки по теме




Статья получена: hostinfo.ru
загрузка...

 

 

Наверх


Постоянная ссылка на статью "PHP: секреты файла php.ini":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

Ваш комментарий

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

PHP: секреты файла php.ini. Часть 2

В предыдущей статье цикла мы начали рассматривать системные переменные или директивы РНР, которые устанавливаются через файл php.ini и позволяют тонко настроить среду исполнения РНР. Сейчас мы продолжим знакомство с наиболее важными директивами – знание и понимание механизма их действия позволят вам полностью управлять работой РНР, построить более защищенную веб-ситему или повысить производительность своего приложения. Мы будем рассматривать конфигурацию РНР версии 5.

» Интересное в сети - 2149 - читать


PHP: секреты файла php.ini. Часть 3

В предыдущей статье цикла мы начали рассматривать системные переменные или директивы РНР, которые устанавливаются через файл php.ini и позволяют тонко настроить среду исполнения РНР. Мы уже рассмотрели общие директивы РНР, теперь же перейдем к настройке отдельных модулей и расширений, которые поставляются вместе с дистрибутивом. Мы будем рассматривать конфигурацию РНР версии 5.

» Интересное в сети - 1880 - читать


PHP: секреты файла php.ini. Часть 4

В предыдущих статьях цикла мы начали рассматривать системные переменные или директивы РНР, которые устанавливаются через файл php.ini и позволяют тонко настроить среду исполнения РНР. Большинство модулей и расширений, как поставляемых в стандартном дистрибутиве, так и в виде дополнительного набора PECL, используют файл php.ini для хранения своих конфигураций. Вместе с тем этот файл универсальный, то есть он изначально включает все директивы для большинства модулей, даже есл ...

» Интересное в сети - 1792 - читать


Секреты PHP-функций для работы с&nb p;массивами. Обработка данных и&nb p;сортировка

Итак, что же там с вашим менеджером, который был упомянут в анонсе статьи? Вы уже написали ту самую злополучную версию функции для перекодировки какого-то поля в XML-файле. Но вечером того же дня оказывается, что надо срочно поменять логику работы скрипта, который уже закачан на сервер, протестирован вашим инженерным составом и одобрен чуть ли не самим генеральным директором фирмы.

» Интересное в сети - 2176 - читать


Секреты PHP-функций для работы с&nb p;массивами. Создание массивов

Основное назначение массивов — быстрая обработка данных. Часто разработчики программного обеспечения выполняют с их помощью сортирование информации, манипулирование исходными данными и получение различных выборок из наборов данных. Бытует мнение, что функциональность массивов гораздо проще организовать с помощью применения «толстой» прослойки SQL-кода и обращения к внешним приложениям типа специализированных хранилищ данных.

» Интересное в сети - 2067 - читать



Статья на тему Интернет » Интересное в сети » PHP: секреты файла php.ini

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия Art.Thelib.Ru