Чтение INI-файла в PHP. Установка Apache, PHP, MySQL

Я, конечно, не супер специалист во всяких делах, которые касаются настройки веб серверов, apache, php и всего прочего, поэтому так до сих пор и не завел себе отдельный сервак для проектов. Тем не менее, иногда в работе попадаются ситуации, когда приходится все же влезать в дебри и нюансы настроек – сегодня будет пост об одной из них. Предыстория достаточно тривиальная: занимался разработкой сайта на typo3 и там для работы с изображениями необходимо установить ImageMagick. Обращаюсь, значит к хостеру, они поставили, а оно почему-то все равно не работает. Потом нахожу запрещенную функцию exec, которая как раз для работы ImageMagick нужна – опять обращаюсь к хостеру. А тут еще сложная процедура общения, где я сначала пишу письмо в админке хостера, на него отвечают на почту клиенту и только потом я могу прочитать послание:)

В общем, кое-как 3 или даже 4 дня я помучался, после чего меня направлили на нужную страницу справки, где я нашел всю необходимую информацию. Как оказалось, я мог указывать для хостинга свои настройки PHP через файл php.ini, что, в принципе, было немного непривычно.

Итак, php.ini – это файл настроек и конфигурации PHP. В нем находится ряд директив, которые определяют различное поведение PHP, ну и, следовательно, сайта. Название файла должно быть именно таким, чтобы интерпретатор смог его найти. В интернете пишут, что он сначала ищет файл настроек php.ini в текущем каталоге, если его нет, то переходит в директорию, указанную в переменной окружения PHPRC, и в последнюю очередь проверят пусть, который задан при компиляции PHP. Как-то так, информация интересная, но больше теоретическая:)

Вернемся к реальным примерам. При работе с разными хостерами можно сказать у меня было несколько вариантов и нюансов настройки PHP.

1. Если в качестве админки используется cPanel, то там находим раздел «Конфигурация PHP », где опубликован перечень параметров PHP для хостинга. Иногда там можно поменять версию PHP, если сервер позволяет работать с 4 и 5 версиями.

Возможно, cPanel и предоставляет варианты изменения настроек PHP (кроме версии), но мне пока такое не попадалось. Поэтому чаще всего я прибегал ко второму варианту.

2. Вполне логично для пользователя, который не очень во всем этом разбирается попросить помощи у хостера . Иногда это является единственным возможным решениям. Тут, видимо, многое зависит от конфигурации и принципов работы сервиса у разным компания – одни дают пользователям больше свободы, другие, наоборот, стараются контролировать все настройки.

3. Некоторые хостеры доверяют своим клиентам настолько, что позволяют использовать свои настройки в php.ini на серверах. Как я понимаю, ряд настроек PHP устанавливается по умолчанию, но местами возникают ситуации, когда для тех или иных систем, скриптов может понадобится дополнительная функциональность – как, например, в моем случае с функцией exec или когда речь идет о wordpress можно вспомнить переменную memory_limit.

На одном из хостеров, с которым работаю, нашел инструкцию как же все-таки можно переопределить некоторые настройки php.ini под свои нужды :

В.htaccess добавляем следующие строки:

#!/bin/sh exec /usr/bin/php -c /home/support/php.ini

Здесь /home/support/php.ini путь к вашему php.ini (конечно сам файл php.ini нужно будет там создать, убедитесь в правильности пути). После этого назначаем файлу php5.fcgi права 755 (chmod 755 php5.fcgi). Теперь обработка настроек PHP будет производится с учетом вашего файла php.ini.

К этой инструкции есть 2 уточнения. При создании файла php5.fcgi нужно использовать unix переводы строк т.е. n. И если возникает 500 ошибка, проверьте лог файл ошибок, где скорее всего найдете в чем проблема.

Кстати, к этому алгоритму один из пользователей добавил комментарий – и очень полезный! Можно все организовать немного проще . Все в том же файле.htaccess добавляем путь к своему php.ini через специальную настройку:

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

P.S. Постовой. Оптимизация, раскрутка и продвижение сайта в поисковых системах Google, Yandex.
Если вам нужна качественная разработка сайта , то можете обратиться в LTD-студию.

Если спросить веб-программиста, какой из всех файлов дистрибутива 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 (тогда такую переменную называют еще флагом). Переменные задаются по одной в строке, а все строки, которые начинаются со знака "; ", воспринимаются как комментарии и не обрабатываются. Помните, что имена директив чувствительны к регистру и в основном пишутся строчными буквами.

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

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

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

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

short_open_tag = — РНР умеет распознавать несколько различных тегов начала и конца блока программы. Этот флаг разрешает применять короткую запись вида .

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

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

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

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

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

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

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

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

display_errors = — разрешает выводить пользователю сообщения про ошибки среды исполнения и предуприждения РНР. Я бы рекомендовал всегда включать эту директиву не только в режиме отладки, но и в реальной работе, а более точно настраивать детализацию вывода при помощи опции 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 ).

Конечно же вы попадали в такую ситуацию, когда приложение, разработанное вами ранее, могло быть снова использовано в рамках другого проекта. Вначале вы конечно же подумали, что это не создаст никаких проблем. Всего-то необходимо скопировать код из одного каталога в другой! Со временем вы осознали, что проекты могут различаться между собой различными параметрами, пусть даже самыми незначительными. Например, это может быть e-mail адрес на который отсылаются сообщения. В таком случае вам ничего не остается, как открыть множество файлов в редакторе и изменить их содержимое, вставляя нужный e-mail при помощи функции найти/заменить. Эта статья расскажет вам о том, как можно избавить себя от подобной работы, а так же порекомендует ряд дополнительных средств для создания и чтения конфигурационных файлов.

Повторное использование кода

Компьютер был изобретен для того, чтобы избавить человека от лишней работы. Развитие компьютерных технологий привело к тому, что человек стал стремиться все меньше времени проводить за компьютером. Допустим, вы программист. Не будь компьютера, вы бы остались без работы. Но в то же время вы стараетесь с помощью компьютера упростить свою ежедневную работы, с этой целью вы используете, например, функцию автозавершения кода в редакторе. Мы хотим подвести вас к той мысли, что код созданный вами, должен быть организован так, чтобы работы по его модификации были сведены к минимуму. Чаще всего это удается, когда вы создаете код, автоматизирующий рутинные операции, такие как создание и прорисовка формы, а так же отправка e-mail. Однако не стоит забывать, что функции для выполнения рутинных операций никогда не бывают на 100% идентичными в различных приложениях. Один формуляр не похож на другой, а сообщения электронной почты предназначены разным адресатам. Однако логика на уровне приложения остается прежней, функции различаются между собой только некоторыми параметрами. Таким образом, вы должны ясно представлять свою цель – разработать код, параметры которого можно было бы определять извне.

Модульная организация

Для решения этой задачи, планируя структуру приложения, вы должны позаботиться о модульности. То есть вам необходимо поместить часто используемые функции или классы в отдельный файл, который будет подключаться через require_once. В этом случае файлы приложения не будут наполнены избыточным кодом. Допустим, вы часто осуществляете запись в лог-файл. В таком случае было бы неплохо код, выполняющий эту операцию, заключить в рамки класса или функции. Будет еще лучше, если вы воспользуетесь уже готовым классом, взятым из какой-нибудь библиотеки исходных кодов, например PEAR.

Параметры процедурального кода

После того, как вы проанализировали код, выделили повторяющиеся фрагменты, распределили их по классам и функциям, необходимо подумать о выделении необходимых параметров, значения которых будут устанавливаться извне. Если речь идет о процедуральном коде, самым простым решением является использование глобальных переменных, которые необходимо определить в отдельном файле. Это позволит в дальнейшем без проблем изменять их значения.

Листинг 1 демонстрирует функцию, которая занимается отправкой e-mail. В ее теле содержится только одна php-функция - mail(). Таким образом, мы избавляемся от необходимости каждый раз указывать получателя при отправке сообщения. Следующая переменная, которую мы определяем, обозначает префикс, предшествующий теме сообщения. Конфигурационный файл, подключаемый через require_once, мог бы выглядеть следующим образом.

Listing 1

$to = "webmaster@localhost" ;
$prefix = " " ;
?>

function sendMail ($subject , $body )
{
global $to , $prefix ;
$subject = $prefix . $subject ;
return mail ($to , $subject , $body );
}
require_once "config1.php" ;
sendMail ("Test" , "Это тестовое сообщение." );
?>

Есть способ лучше

Даже если рассмотренный выше способ и является действенным, однако это не самое лучшее решение. По мере того как код вашего приложения будет усложняться, вырастет и число опций, тогда могут возникнуть следующие проблемы:

  • Глобальные переменные, которые мы используем, могут породить конфликты в пространстве имен.
  • В том случае, если конфигурационные файлы редактируются не программистом, а дилетантом, в системе могут возникнуть синтаксические ошибки, например из-за незакрытых кавычек.
  • Для того, чтобы получить доступ к различным переменным, необходимо обращаться к массиву $_GLOBALS.

Вместо php-модулей существуют другие форматы, которые могут быть легко поняты и изменены дилетантами, а так же php-скриптами. Мы имеем в виду два формата: этого широко используемые операционной системой Windows ini-файлы, а так же формат XML.

В этом примере вы уже заметили, что внутри тега указывается тип значения. Названия типов идентичны тем, что используются в php-функции settype(). Если тип не указан, тогда значение интерпретируется как строка. Для часто используемых опций можно определить отдельный тег.





webmaster@localhost
100

Наряду с функцией getConfigValue, существует функция setConfigValue(), с помощью которой можно изменить значение опции. Затем конфигурационный файл может быть заново записан с помощью writeConfigFile() (см листинг 7).

patConfiguration предлагает также серию дополнительных возможностей. Например, наряду с тегами, существует возможность определять атрибуты и пространства имен (Namespace), а к тегу можно привязать внешний файл, таким образом, опции будут распределены по нескольким файлам. Кроме этого patConfiguration включает систему кэширования, благодаря которой пропадает необходимость в многократном считывании конфигурационного файла.

Дополнительную информацию вы сможете найти на PHP Application Tools-Homepage и в patConfiguration-Tutorial на DevShed .

Listing 7

require_once "include/patConfiguration.php" ;

$config = new patConfiguration (
array(
"configDir" => "./" ,
"errorHandling" => "nice_die"
);
$config -> parseConfigFile ("config6.xml" );
$config -> setConfigValue ("errors.email" , "errors@localhost" );
$config -> writeConfigFile ("config6_new.xml" , "xml" , array("mode" => "pretty" ));
?>

Заключение

Забота о гибкости настроек приложения может сберечь много времени, особенно если его компоненты предполагается использовать в других проектах. Вы потратите еще меньше времени, если доверите работу с конфигурационными файлами одному из готовых классов. Выбор между PEAR::Config и patConfiguration зависит от задачи. Преимуществом PEAR::Config является поддержка различных форматов конфигурационных файлов, в то время как patConfiguration прекрасно работает с XML, так же предоставляет ряд дополнительных возможностей. Однако с появлением версии 2.0.0 этот пакет будет иметь одинаковый API для считывания ini и wddx файлов. PHP-массив поддерживаются уже в текущей версии.



Есть еще вопросы или что-то непонятно - добро пожаловать на наш

Конфигурационный файл php.ini является основным инструментом настройки ядра PHP . Он считается каждый раз при инициализации PHP . Если изменение не отображается, не забудьте остановить и перезапустить httpd . Если внесенные изменения до сих пор действуют, используйте функцию phpinfo() , чтобы проверить, php ini где лежит.

Файл конфигурации хорошо прокомментирован и подробно проработан. Параметры чувствительны к регистру, значения ключевых слов – нет; пробелы и строки, начинающиеся с точки с запятой, игнорируются. Логические значения могут быть представлены как 1/0 , Yes/No , On/Off или True/False . Значения по умолчанию в php.ini повлияют на установку PHP , которую позже можно будет настроить.

В этой статье мы рассмотрим важные настройки в файле php.ini , которые могут потребоваться для PHP парсера.

short_open_tag = Off

Короткие открытые теги выглядят так: . Для этого параметра должно быть установлено значение Off , если вы хотите использовать функции обработки XML .

safe_mode = Off

Если этот параметр имеет значение ON , вероятно, вы скомпилировали PHP с флагом enable-safe-mode . Безопасный режим наиболее важен для использования CGI .

safe_mode_exec_dir =

Эта опция имеет значение только в том случае, если включен безопасный режим. Она также может быть установлена с флагом —with-exec-dir во время процесса сборки Unix . PHP в безопасном режиме выполняет внешние двоичные файлы только из этого каталога. По умолчанию используется каталог /usr/local/bin . Это не имеет ничего общего с обслуживанием обычной PHP/HTML веб-страницы.

safe_mode_allowed_env_vars =

Эта опция php ini задает, какие переменные окружения пользователи могут изменить в безопасном режиме. По умолчанию, только те переменные, к которым добавлено «PHP_ ». Если эта директива пуста, то большинство переменных можно изменять.

safe_mode_protected_env_vars =

Параметр устанавливает, какие переменные окружения пользователи не могут изменить в безопасном режиме, даже если опция safe_mode_allowed_env_vars включена.

disable_functions =

Довольно полезным дополнением в конфигурации PHP4 , которое сохранилось и в версии PHP5 , является возможность отключения выбранных функций по соображениям безопасности. Раньше это требовало ручной правки кода на языке C , на котором был написан интерпретатор PHP . Функции файловой системы, операционной системы и сети должны быть первыми в этом списке, потому что возможность записи файлов и изменения системы через HTTP не является безопасным.

max_execution_time = 30

При настройке php ini нужно знать, что функция set_time_limit() не будет работать в безопасном режиме. Поэтому это основной способ реализовать задержку выполнения скрипта в безопасном режиме. В Windows вы должны выполнить принудительное завершение, основываясь на максимальном уровне потребляемой памяти, а не на времени. Также можно использовать настройку таймаута Apache для реализации задержки. Но она будет применена и к файлам сайта, не являющимся PHP .

error_reporting = E_ALL & ~E_NOTICE

Значением по умолчанию является E_ALL & ~E_NOTICE , все ошибки кроме уведомлений. Для серверов должно быть установлено, как минимум, значение по умолчанию. И только на основных серверах можно использовать меньшее значение.

error_prepend_string = [«»]

Вместе с » используется со строками, как при формировании значения поля формы.

variables_order = EGPCS

Заменяет gpc_order . Обе версии устарели вместе с register_globals . Он устанавливает порядок различных переменных: Environment , GET , POST , COOKIE и SERVER (или Built-in ). Вы можете изменить этот порядок. Переменные будут последовательно перезаписаны слева направо, при этом самый правый всегда «выигрывает ». Это означает, что если оставить значение по умолчанию и использовать одно имя для переменной среды, переменной POST и переменной COOKIE , то, в конце концов, имя будет принадлежать переменной COOKIE .

register_globals = Off

Этот параметр php ini set позволяет определить, нужно ли регистрировать переменные EGPCS как глобальные. В настоящее время этот способ устарел, и, начиная с PHP 4.2 , этот флаг по умолчанию установлен в значение Off . Вместо него используйте суперглобальные массивы.

gpc_order = GPC

Этот параметр устарел.

magic_quotes_gpc = On

Экранирует кавычки во входящих данных GET/POST/COOKIE . Если вы используете много форм, которые отправляют данные сами себе или другим формам, и отображают значения форм, нужно активировать эту директиву или использовать функции addslashes() для данных строкового типа.

magic_quotes_runtime = Off

Этот параметр экранирует кавычки во входящих строках базы данных и текстовых строках. Помните, что SQL добавляет слеш в одинарные кавычки и апострофы при сохранении строк и не убирает их при возвращении строк. Если этот параметр выключен, необходимо использовать функцию stripslashes() при выводе любых типов строковых данных из БД SQL . Если для magic_quotes_sybase установлено значение On , то этот параметр должен быть Off .

magic_quotes_sybase = Off

Экранирует одиночные кавычки во входящих строках базы данных и текстовых строках с одиночными кавычками в стиле Sybase , а не обратным слешем. Если для параметра magic_quotes_runtime установлено значение On , данный параметр должен быть отключен.

auto-prepend-file =

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

auto-append-file =

Если в этом параметре указан путь, PHP должен автоматически ввести конструкцию include() в конец каждого PHP-файла , кроме случаев, когда осуществляется выход с помощью функции exit () . Следует учитывать ограничения для путей включаемых файлов.

include_path =

Если установить это значение, вам будет разрешено включать или запрашивать файлы только из указанных каталогов. Каталог include обычно находится под корневым документом. Это необходимо, если вы работаете в безопасном режиме. Установите для параметра значение .in , чтобы включить файлы из каталога, в котором находится ваш скрипт. Несколько каталогов разделяются двоеточиями: .:/usr/local/apache/htdocs:/usr/local/lib .

doc_root =

При настройке php ini если вы используете Apache , то в файле httpd.conf корневой каталог документа для этого сервера или виртуального хоста уже задан. Установите это значение здесь, если используете безопасный режим или хотите разрешить PHP только для части сайта (например, только в одном подкаталоге ).

file_uploads =

Активируйте этот флаг, если загружаете файлы с помощью PHP-скрипта .

upload_tmp_dir =

Не удаляйте комментарии из этой строки, если не понимаете, что такое !

session.save-handler = files

За исключением редких случаев изменять этот параметр не нужно.

ignore_user_abort =

Определяет, что произойдет, если посетитель сайта нажмет в своем браузере кнопку «Остановить ». По умолчанию установлено значение On , которое означает, что скрипт продолжит работать до завершения или таймаута. Если изменить значение данного параметра на Off , скрипт будет прерван. Этот параметр работает только в режиме модуля, а не в CGI .

Создание и использование собственного файла php.ini

Любой пользователей может создать собственный файл php.ini и разместить его в папке вызываемого срипта.
Это довольно удобно, так как Вы можете самостоятельно редактировать свои настройки, без обращения в службу тех. поддержки

Если Вы решили положить php.ini где то в public_html, то создайте файл.htaccess в корневой папке сайта (например /home/user/public_html ,где user ваш никнейм в cpanel) или если файл существует то только добавьте в любом месте (в начале или конце) в файл.htaccess директивы которые описанны ниже.


order allow,deny
deny from all

эти директивы запрещают просмотра файла php.ini посторонними.

При такой установке PHP в виде обработчика CGI, SuPHP, Вы не можете использовать в файле.htaccess следующие директивы: php_flag, php_admin_flag, php_value и прочих, которые изменяют какие-либо параметры PHP окружения это вызовет ошибку с кодом 500, Internal Server Error.

Внимание: собственный файл php.ini действителен только в пределах директории, в которой размещён, если не указана специальная опция, см. ниже.

suPHP_ConfigPath /home/user/public_html

т.е. в пишите эту строку в файл.htaccess перед кодом запрета просмотра файла php.ini, только замените user на свое имя пользователя.

Права доступа на файлы и папки:

644 - запись в файл разрешена (по умолчанию)
444 - запись в файл запрещена (только чтение и исполнение)
755 - права доступа на папки (по умолчанию, менять не требуется)

Обратите внимание - при правах доступа 644 запись разрешена только для скриптов которые запускаются в среде Вашего аккаунта. Никто другой запись произвести не сможет. Для ещё большего увлечения безопасности Вы можете сменить права доступа у файлов на 444 - в этом случае даже Ваши скрипты не смогут ничего записать в файлы, но это не обязательно.

Таким образом при установке скриптов не требуется менять права доступа, даже если в инструкции к скрипту написано что их нужно изменить. Просто пропускайте пункт смены прав доступа CHMOD.

Пример файла php.ini и описание некоторых его параметров:

; Синтаксис файла: "директива = значение"
; Знак комментария в php.ini - ";" (точка с запятой). Все, что находится в строке после ";" не воспринимается PHP

safe_mode = Off

disable_functions = ; В целях безопасности, позволяет запретить выполнение указаных функций

max_execution_time = 30 ; Максимальное кол-во секунд исполнения скрипта

memory_limit = 16M ; Максимум оперативной памяти, которую может взять себе скрипт

error_reporting = E_ALL & ~E_NOTICE ; Показывать все ошибки, кроме замечаний

display_errors = On ; Вывод ошибок в браузер. Для облегчения отладки сценариев

variables_order = "EGPCS" ; Порядок, в котором PHP будет регистрировать перменные (E - встроенные переменные, G - GET переменные, P - POST переменные, C - Cookies, S - сессии). Отсутствие какой-либо из букв не позволит вам работать с соответствующими переменными

register_globals = On ; Возможность обращения к переменным, поступающим через GET/POST/Cookie/сессии, как к обычным переменным (например, "$переменная")

post_max_size = 55M ; Максимальный объём данных который может быть принят

magic_quotes_gpc = On ; Включение автоматической обработки кавычек, поступающих через POST/GET/Cookie

file_uploads = On ; Разрешает загрузку файлов

;upload_tmp_dir = ; Каталог для временных закачанных файлов (не забудте создать этот каталог!)

upload_max_filesize = 5M ; Максимальный размер закачиваемого файла

session.save_handler = files ; Хранить данные сессий в файлах

session.save_path = /tmp ; Папка для хранения файлов сессий (не забудте создать этот каталог!)

session.use_cookies = 1 ; Использовать cookie в сессиях

session.name = PHPSESSID ; Исользовать в качестве имени сессии и сессионной cookie ID сессии

session.cookie_lifetime = 0 ; Время жизни сессионных cookie ("0" - до закрытия окна браузера)

session.use_trans_sid = 1 ; ID сессии будут добавляться ко всем ссылкам на странице автоматически (если у пользователя отключены cookie)

; и много других параметров...

Внимание!: Данная информация не актуальна для наших серверов, управлять PHP.ini, т.е. настройками PHP и версией PHP, вы можете в CPanel в раздлеле Select PHP version (Выбор PHP версии)



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: