Управляющие константы файла init.php

Файл init.php был в введен в версии 2.1, основное его назначение это инициализация системных констант IP.Board.

Что такое системная константа

Константа это особый вид переменной, отличающийся от последней тем, что на протяжении всего выполнения программы сохраняет свое значение. Другими словами, присвоив в начале работы программы константе значение 1, в любой части программы значение константы так и останется неизменным, т.е. будет 1. Данное свойство констант используется в IP.Board для хранения значений абсолютных путей к скриптам, значений системных флагов отладки и так далее, изменение значения такой константы приводит к изменению работы скрипта, именно такие константы называются системными 1).

Описание системных констант

Ниже рассмотрен полный список констант из файла init.php для версии 2.3. Стоит заметить что в версии 2.1 список констант в init.php был значительно меньше и тем самым не представлял значительного интереса.

IPB_MEMORY_START

if ( @function_exists( 'memory_get_usage' ) )
{
	define( 'IPB_MEMORY_START', memory_get_usage() );
}

Введена: с версии 2.3
Значение по-умолчанию: memory_get_usage()

Предназначена для хранения значения количества выделенной памяти перед началом выполнения скрипта IP.Board. Данная константа введена в целях профилирования скрипта, а именно для определения мест утечек памяти в скрипте, поэтому изменять ее значение не нужно.

ROOT_PATH

/**
* ROOT PATH
*
* If __FILE__ is not supported, try ./ and
* turn off "USE_SHUTDOWN" or manually add in
* the full path
* @since 2.0.0.2005-01-01
*/
define( 'ROOT_PATH', dirname( __FILE__ ) ."/" );

Введена: с версии 2.0, выделена в init.php с версии 2.1
Значение по-умолчанию: dirname( __FILE__ ) ."/"

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

define( 'ROOT_PATH', "/home/path/to/userdir/public_html/forum/" );

Если файл init.php находится в корневой директории форума, то при установленном в 0 значении константы USE_SHUTDOWN, возможно использование относительного пути, например:

define( 'ROOT_PATH', "./" );

IPB_ACP_DIRECTORY

/**
* Directory name for the admin folder
* @since 2.2.0.2006-11-06
*/
define( 'IPB_ACP_DIRECTORY', 'admin' );

Введена: в версии 2.2
Значение по-умолчанию: admin

Значением константы является название директории админской части на сервере. В версии 2.2 появилась возможность менять положение административной части форума путем переименования директории admin на сервере, на собственное название. Что бы система знала где искать администраторскую часть (это нужно в случае выведения ссылки на админцентр) и существует данная константа. Таким образом если вы сменили название директории администраторской части с admin на odmin, то вам необходимо изменить значение константы:

define( 'IPB_ACP_DIRECTORY', 'odmin' );

IN_DEV

/**
* DEV MODE
*
* Turns IPB into 'developers' mode which enables
* some debugging and other tools. This is NOT recommended
* as it opens your board up to potential security risks
* @since 2.0.0.2005-01-01
*/
define ( 'IN_DEV', 0 );

Введена: в версии 2.0, в init.php с версии 2.1
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Предназначение константы в определении режима работы IP.Board. В стандартной поставке система работает в обычном режиме, однако существует еще и так называемый «режим разработчика» или «режим отладки». В этом режиме система предоставляет администратору форума некоторые отладочные и дополнительные функции. Например, возможность просмотра очереди SQL-запросов, расход памяти, работу парсеров BB-Кода, а так же дополнительные настройки для добавления/удаления настроек в АЦ. Данный режим НЕ ДОЛЖЕН включаться на работающем форуме, так как режим создает потенциальную опасность для работы форума.
Значение константы может быть только двух типов 0 - режим отладки выключен и 1 - режим отладки включен. Другими словами запись

define ( 'IN_DEV', 1 );

означает что режим отладки включен, а для того что бы его выключить необходимо поменять значение на 0

define ( 'IN_DEV', 0 );

IPS_SQL_DEBUG_MODE

/**
* SQL DEBUG MODE
*
* Turns on SQL debugging mode. This is NOT recommended
* as it opens your board up to potential security risks
* @since 2.2.0.2006-11-06
*/
define ( 'IPS_SQL_DEBUG_MODE', 0 );

Введена: в версии 2.2
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Константа отвечает за показ ошибок SQL (ошибок при работе с базой данных). В ранних версиях форума (до версии 2.2) все ошибки к базе данных показывались в браузере 2), это наносило определенный урон безопасности форума, потому как злоумышленник мог воспользоваться описанием ошибки, как руководством к дальнейшим действиям. В версиях 2.2+ все ошибки, происходящие при обращении к базе данных, заменяются сообщением «IPS Driver Error» или «Ошибка при работе с базой данных», при этом подробности ошибки записываются в лог файл 3). Для разработчика постоянный мониторинг лог файлов может быть утомительным, для этого в IPS и предусмотрели данную константу. При переключении значения константы в 1, ошибки при работе с БД будут выводится прямо на экран браузера. Стоит заметить, что включенный показ ошибок БД на рабочем форуме представляет существенный риск безопасности форума.

IPS_MEMORY_DEBUG_MODE

/**
* MEMORY DEBUG MODE
*
* Turns on MEMORY debugging mode. This is NOT recommended
* as it opens your board up to potential security risks
* @since 2.2.0.2006-11-06
*/
define ( 'IPS_MEMORY_DEBUG_MODE', 0 );

Введена: в версии 2.2
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Константа отвечает за включение или отключение режима отладки расхода памяти. Опять же опция для разработчиков и на рабочем форуме она просто не нужна. При включении отладки и при наличии в PHP включенных механизмов контроля за памятью, администратор увидит сколько памяти «отъедает» форум. Уменьшить или увеличить количество расходуемой памяти через опцию нельзя, она чисто информативная. Скорее всего опция будет полезна тем разработчикам, которые меняют ядро в целях повышения производительности.

IPS_XML_RPC_DEBUG_

/**
* Write to debug file?
* Enter relative / full path into the constant below
* Remove contents to turn off debugging.
* WARNING: If you are passing passwords and such via XML_RPC
* AND wish to debug, ensure that the debug file ends with .php
* to prevent it loading as plain text via HTTP which would show
* the entire contents of the file.
* @since 2.2.0.2006-11-06
*/
define( 'IPS_XML_RPC_DEBUG_ON'  , 0 );
define( 'IPS_XML_RPC_DEBUG_FILE', ROOT_PATH . 'cache/xmlrpc_debug.cgi' );

Введена: в версии 2.2
Значение по-умолчанию: IPS_XML_RPC_DEBUG_ON - 0, IPS_XML_RPC_DEBUG_FILE - ROOT_PATH . 'cache/xmlrpc_debug.cgi'
Допустимые значения: IPS_XML_RPC_DEBUG_ON - 0 или 1

Сразу две константы в одном блоке, потому что первая не имеет смысла без второй, а вторая - без первой. Данные константы предназначены для управления режимом отладки в XML_RPC клиенте IP.Board. Константа IPS_XML_RPC_DEBUG_ON, как раз и отвечает за включение или отключение режима отладки, а вот константа IPS_XML_RPC_DEBUG_FILE отвечает за полный путь к файлу, куда будет записываться отладочный лог при включении режима отладки. Пусть может быть как абсолютный ('/home/path/to/userdir/forum/xml_rpc/debug.cgi') так и относительный ('./xml_rpc/debug.cgi'). Данный набор констант будет необходим тем, кто разрабатывает какое-либо приложение внутри IP.Board, осуществляющее общение по XML_RPC протоколу с использованием встроенного XML_RPC клиента форума. Так же стоит заметить, что если по XML_RPC передаются логин или пароль, то лог-файл должен иметь расширение, которое не позволит вывести данный файл, как PLAIN-TEXT в браузере, например php.

IPB_ACP_IP_MATCH

/**
* Allow IP address matching when dealing with ACP sessions
* @since 2.2.0.2006-06-30
*/
define( 'IPB_ACP_IP_MATCH', 1 );

Введена: в версии 2.2
Значение по-умолчанию: 1
Допустимые значения: 0 или 1

Константа, позволяющая отключить проверку IP администраторской сессии при работе с админцентром IP.Board. В целях безопасности по-умолчанию константа имеет значение 1 (проверка включена). Работа проверки заключается в том, что если в момент работы с админцентром у администратора поменялся IP адрес, то система выведет ошибку «Администраторских сессиий с таким IP не найдено» и предложит ввести логин и пароль для продолжения работы. Таким образом предотвращается возможность кражи активной администраторской сессии и использования ее злоумышленником с другого компьютера.

В каких случаях данную проверку нужно отключать?
Только в случае если у вас постоянно меняющийся внешний IP-адрес. Причем смены на столько часты, что не дают работать в админцентре в течение пары минут.

IPB_ACP_ALLOW_EXEC_URL

/**
* Allow exec.url="" tags
* Turning this on is a potential security risk as a malicious user
* could, with access to your ACP, add in an executable
* shell script which would allow root access to your
* server!
*/
define( 'IPB_ACP_ALLOW_EXEC_URL', 0 );

Введена: в версии 2.2
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Константа позволяет настроить систему шаблонов для использования конструкции exec.url="". Тэг exec.url предназначен для вставки результатов работы внешних скриптов (или html файлов). IPB_ACP_ALLOW_EXEC_URL со значением 1, позволяет использовать данный тэг в шаблонах форума. Однако стоит помнить, что в случае проникновения злоумышленника в админцентр, он так же сможет воспользоваться данным тэгом с целью подключения внешнего скрипта, который может поставить под угрозу не только безопасность форума, но и сервера!

IPB_ACP_ALLOW_TEMPLATE_PHP

/**
* Allow PHP tags in template HTML?
* Turning this on is a potential security risk as a malicious user
* could, with access to your ACP, add in an executable
* shell script which would allow root access to your
* server!
*/
define( 'IPB_ACP_ALLOW_TEMPLATE_PHP', 0 );

Введена: в версии 2.2
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Константа аналогична IPB_ACP_ALLOW_EXEC_URL с той лишь разницей, что позволяет использовать в шаблонах активный PHP-код. Для данной константы в значении 1 действуют те же ограничения в безопасности что и для IPB_ACP_ALLOW_EXEC_URL.

IPB_ACP_AJAX_UTF_CONVERT

/**
* Allow UTF charset convertations for AJAX-based tools
* @since 2.2.2.2007-02-25
*/
define( 'IPB_ACP_AJAX_UTF_CONVERT', 1 );

Введена: только в русской версии 2.2.2
Значение по-умолчанию: 1
Допустимые значения: 0 или 1

Константа позволяет отключить принудительное перекодирование данных получаемых из AJAX инструментов в админцентре. Данная константа была введена в русской версии IP.Board для исправления ошибки, возникающей с нечитабельной кодировкой в некоторых вкладках админцентра 4). Если все работает хорошо, то изменять значение данной константы не рекомендуется.

IPB_MAKE_PORTAL_HOMEPAGE

/**
* Make the IPB portal your default forum page?
*/
define( 'IPB_MAKE_PORTAL_HOMEPAGE', 0 );

Введена: в версии 2.0
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

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

IPB_ACP_USE_GZIP

/**
* Use GZIP page compression in the ACP
* @since 2.2.0.2006-06-30
*/
define( 'IPB_ACP_USE_GZIP', 1 );

Введена: в версии 2.2
Значение по-умолчанию: 1
Допустимые значения: 0 или 1

Константа, управляющая функцией GZip-сжатия страниц админцентра. По-умолчанию значение константы 1, что означает включение сжатия страниц админцентра. Сжатие страниц позволяет уменьшить объем трафика между клиентом и сервером. Однако бывают сервера, на которых администратор уже подключил модуль автоматического GZip-сжатия отдаваемого контента, если у вас именно такой сервер, то при значении данной константы равной 1 вы не сможете попасть в админцентр. Вместо него будет либо белая страница, либо непонятный набор символов. Логично, что при наличии такой проблемы стоит поменять значение константы с 1 на 0:

define( 'IPB_ACP_USE_GZIP', 0 );

Изменение значения данной константы на серверах без принудительного сжатия ни приведет к изменениям в работе форума, а только к уменьшению (при значении 1) или к увеличению (при значении 0) количества трафика между сервером и клиентом при просмотре админцентра.

USE_SHUTDOWN

/**
* USE SHUT DOWN
*
* Enable shut down features?
* Uses PHPs register_shutdown_function to save
* low priority tasks until end of exec
* @since 2.0.0.2005-01-01
*/
define ( 'USE_SHUTDOWN', IPB_THIS_SCRIPT == 'public' ? 1 : 0 );

Введена: в версии 2.0
Значение по-умолчанию: IPB_THIS_SCRIPT == 'public' ? 1 : 0
Допустимые значения: см. ниже

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

Константа не смотря на странное значение по-умолчанию имеет характер переключателя, то есть может принимать только два значения 0 и 1. В значении по-умолчанию просто ввели условность, включив возможность отложенных команд только для скриптов, реализующих процессы работы пользователя с форумом. В то же время отложенные команды отключены для скриптов планировщика задач и скриптов админцентра.

Что бы повсеместно отключить отложенные задачи необходимо написать в значении константы 0:

define ( 'USE_SHUTDOWN', 0 );

Что бы повсеместно включить (этого делать ни в коем случае не стоит, здесь это приведено в качестве примера):

define ( 'USE_SHUTDOWN', 1 );

Что будет если я все же повсеместно включу данную функцию? Некоторые функции админцентра будут работать не верно, а задачи планировщика, связанные с пересчетом счетчиков на форуме, вероятно перестанут работать вовсе.

KERNEL_PATH

/**
* IPS KERNEL PATH
*
* @since 2.0.0.2005-01-01
*/
define( 'KERNEL_PATH'  , ROOT_PATH.'ips_kernel/' );

Введена: в версии 2.0
Значение по-умолчанию: ROOT_PATH.'ips_kernel/'

Предназначена для хранения абсолютного пути к директории базовых классов форума (ядра форума). Данная константа обычно инициализируется автоматически, и зависит от значения константы ROOT_PATH. В случае возникновения проблем с подключением классов ядра, вы можете изменить значение данной константы на правильный абсолютный путь:

define( 'ROOT_PATH', "/home/path/to/userdir/public_html/forum/ips_kernel/" );

LEGACY_MODE

/**
* LEGACY MODE
*
* Legacy mode? Will enable hacks for 2.0 to work
* with a little modification
* @since 2.1.0.2005-07-12
*/
define( 'LEGACY_MODE', 0 );

Введена: в версии 2.1
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Константа, отвечающая за включение или отключения режима совместимости с кодом модификаций для версий 2.0.

Внимание! эта константа может привести к неправильной работе форума и совершенно не позволит работать модификациям от версии 2.0.х на более старших версиях (2.1, 2.2, 2.3). В будущих версиях данная константа скорее всего будет удалена или добавлена в список depricated-констант.

USE_MODULES

/**
* USE MODULES
*
* Enable module usage?
* (Vital for some mods and IPB enhancements)
* @since 2.0.0.2005-01-01
*/
define ( 'USE_MODULES', 1 );

Введена: в версии 2.0
Значение по-умолчанию: 1
Допустимые значения: 0 или 1

Константа, позволяющая отключить возможность использования модулей.

Данная константа имела существенное значение в версиях 2.0 и 2.1, когда в виде модулей были выполнены Блоги и Галерея. Однако в версии 2.2 были введены новые возможности интеграции сторонних продуктов с форумом под названием «компоненты». Так же для новой версии форума и Блоги и Галереи переписаны в виде компонент. Скорее всего IPS откажется от использования механизма модулей в сторону более перспективных компонент.

CUSTOM_ERROR

/**
* CUSTOM ERROR
*
* Enable custom error handling?
* Useful to trap skin errors, etc
* @since 2.0.0.2005-01-01
*/
define( 'CUSTOM_ERROR', 0 );

Введена: в версии 2.0
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Включение встроенного в IP.Board обработчика стандартных ошибок PHP. Включение встроенного обработчика ошибок

define( 'CUSTOM_ERROR', 1 );

позволяет в случае белых страниц 5) выявлять причину возникновения ошибок при отключенном показе ошибок в PHP. Так же данный обработчик может быть полезным инструментом для обнаружения ошибок внутри шаблонов форума.

Почему все же по-умолчанию обработчик отключен?
Дело в том, что в версиях 2.0 и 2.1 он был включен, но на загруженных форумах приводил к проблемам с памятью. Создание собственного обработчика ошибок требует дополнительного выделения памяти в PHP. Последние версии форума и без того требовательны к памяти, поэтому разработчиками было решено отключить собственный обработчик ошибок.

TRIAL_VERSION

/**
* TRIAL VERSION
*
* Seriously, like, leave this alone
* @since 2.0.0.2005-01-01
*/
define( 'TRIAL_VERSION', 0 );

Введена: в версии 2.0
Значение по-умолчанию: 0
Допустимые значения: 0 или 1

Наследие платности IP.Board и давнего выпуска триальных версий с ограничениями. Константа отвечает за переключение режима работы форума с обычного, на триальный и обратно. Более подробного описания константа не требует, если интересно можете проверить действие разных значений в константе сами, страшного с форумом ничего не произойдет, однако, после экспериментов не забудьте вернуть значение константы в 0.

IPBVERSION & IPB_LONG_VERSION

/**
* Version numbers
*
* @since 2.0.0.2005-01-01
*/
define ( 'IPBVERSION', '2.3.3' );
define ( 'IPB_LONG_VERSION', '23006' );

Введена: в версии 2.0

Константа IPBVERSION содержит человеко-понятный номер версии, который выводится внизу форума. Это значение можно менять на какое угодно, а вот значение константы IPB_LONG_VERSION является системным значением версии. Поэтому если вы его поменяете без необходимости (а как показывает практика, такой необходимости не бывает), то можете забыть о нормальной работе системы уведомлений об обновлениях, выходе новых версий, а так же обновлений безопасности. Итак замена того что приведено выше на

define ( 'IPBVERSION', '9.9.9 Paradox Code Edition' );
define ( 'IPB_LONG_VERSION', '23006' );

Допустима. А вот замена на

define ( 'IPBVERSION', '2.3.3' );
define ( 'IPB_LONG_VERSION', '23666' );

Нет.

1) стоит заметить что в IP.Board существуют другие константы - флаговые константы, они не влияют на работу приложения, а предназначены для отслеживания правильного подключения файлов скрипта.
5) "Белая страница" – о проблеме «белых» страниц
 

sources/init.php.txt · Последние изменения: 2007/12/24 11:39 root

Работает на DokuWiki
© 2002—2006 ibresource
e-mail: wikiteam@iblink.ru