IP.Board Requirements Checker
You are running PHP {$version}";
//-----------------------------------------
// Check for zend guard
//-----------------------------------------
$hasZend = false;
if ( function_exists( 'zend_loader_enabled' ) )
{
if ( @zend_loader_enabled() === true )
{
$hasZend = true;
}
}
flushOutput( "Только для IP.Nexus: Проверка обработки скриптов, закодированных Zend Guard...", $hasZend, "Ваш сервер не может обрабатывать закодированные скрипты IP.Nexus. Это не влияет на IP.Board, IP.Downloads. IP.Blog, IP.Gallery, IP.Content, IP.Chat" );
//-----------------------------------------
// Memory limit
//-----------------------------------------
$_memLimit = null;
$_recLimit = 128;
if( @ini_get('memory_limit') )
{
$_memLimit = @ini_get('memory_limit');
}
if( $_memLimit )
{
$_intLimit = $_memLimit;
$_intRec = $_recLimit * 1024 * 1024;
preg_match( "#^(\d+)(\w+)$#", strtolower($_intLimit), $match );
if( $match[2] == 'g' )
{
$_intLimit = intval( $_intLimit ) * 1024 * 1024 * 1024;
}
else if ( $match[2] == 'm' )
{
$_intLimit = intval( $_intLimit ) * 1024 * 1024;
}
else if ( $match[2] == 'k' )
{
$_intLimit = intval( $_intLimit ) * 1024;
}
else
{
$_intLimit = intval( $_intLimit );
}
if( $_intLimit >= $_intRec )
{
flushOutput( "Проверка выделения памяти ({$_recLimit}M или больше рекомендуется)...", true, "Ваш сервер ограничивает объем выделяемой памяти(memory_limit): {$_memLimit}" );
}
else
{
flushOutput( "Проверка выделения памяти ({$_recLimit}M или больше рекомендуется)...", 2, "Ваш сервер ограничивает объем выделяемой памяти(memory_limit): {$_memLimit}. Вы можете использовать IP.Board, но свяжитесь с вашим хостинг-провайдером и попросите его увеличить memory_limit до {$_recLimit}M, чтобы избежать ошибок в будущем. Возможно прекращение работы скриптов при обработке больших объемов данных" );
}
}
else
{
flushOutput( "Проверка выделения памяти ({$_recLimit}M или больше рекомендуется)...", 2, "Не удалось получить значение переменной memory_limit" );
}
//-----------------------------------------
// Checking for SPL
//-----------------------------------------
$splExists = in_array( 'SPL', $extensions );
flushOutput( "Проверка SPL...", $splExists, "IP.Board " . IPB_VERSION . " требуется расширение PHP SPL. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки библиотеки SPL." );
//-----------------------------------------
// Checking for DOM XML
//-----------------------------------------
$domXML = in_array( 'dom', $extensions );
flushOutput( "Проверка обработки DOM XML...", $domXML, "IP.Board " . IPB_VERSION . " требуется расширение обработчика DOM XML. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки библиотеки libxml2." );
//-----------------------------------------
// Check for GD2
//-----------------------------------------
$gd2 = in_array( 'gd', $extensions );
flushOutput( "Проверка библиотеки GD...", $gd2, "IP.Board " . IPB_VERSION . " требуется библиотека GD2. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки библиотеки libgd." );
if( function_exists( 'gd_info' ) )
{
$gdInfo = gd_info();
$fail = true;
if( $gdInfo["GD Version"] )
{
preg_match( "/.*?([\d\.]+).*?/", $gdInfo["GD Version"], $matches );
if( $matches[1] )
{
$compareVersions = version_compare( '2.0', $matches[1], '<=' );
if( !$compareVersions )
{
$fail = 2;
}
}
}
flushOutput( "Проверка GD2...", $fail, "Библиотека GD установлена, но IP.Board " . IPB_VERSION . " требуется библиотека GD версии 2. Версия переданная вашим сервером '{$gdInfo['GD Version']}'. Пожалуйста убедитесь, что используете GD версии 2, и обновите библиотеку libgd при необходимости." );
}
//-----------------------------------------
// Checking for mysql extension
//-----------------------------------------
$mysql = in_array( 'mysql', $extensions );
$mysqli = in_array( 'mysqli', $extensions );
flushOutput( "Проверка mysql...", ( $mysql OR $mysqli ), "Ваш сервер не имеет библиотеки mysql, попросите хостера установить поддержку mysqli." );
if( $mysql AND !$mysqli )
{
flushOutput( "Проверка поддержки mysqli...", false, "Расширение mysqli рекомендуется вместо стандартного интерфейса mysql. Форум может обойтись и без него, но, если возможно, установите его для улучшения скорости и безопасности работы." );
}
//-----------------------------------------
// Checking for JSON
//-----------------------------------------
$json = in_array( 'json', $extensions );
flushOutput( "Проверка JSON...", $json, "Расширение PHP JSON необходимо для функционирования форума. Узнайте как установить расширение json." );
//-----------------------------------------
// Checking for openSSL
//-----------------------------------------
$openssl = in_array( 'openssl', $extensions ) ? true : 2;
flushOutput( "Проверка openSSL...", $openssl, "OpenSSL необходим для модулей связи с Facebook, Twitter, и модуля Subscription Manager. Если вы не используете ни один из этих модулей, то можно обойтись без этого расширения, иначе вам необходимо установить расширение openssl." );
//-----------------------------------------
// Suhosin
//-----------------------------------------
if( extension_loaded( 'suhosin' ) )
{
$_postMaxVars = @ini_get('suhosin.post.max_vars');
$_reqMaxVars = @ini_get('suhosin.request.max_vars');
$_getMaxLen = @ini_get('suhosin.get.max_value_length');
$_postMaxLen = @ini_get('suhosin.post.max_value_length');
$_reqMaxLen = @ini_get('suhosin.request.max_value_length');
$_reqMaxVar = @ini_get('suhosin.request.max_varname_length');
$_indPMV = $_postMaxVars < 4096 ? 2 : true;
$_indRMV = $_reqMaxVars < 4096 ? 2 : true;
$_indGML = $_getMaxLen < 2000 ? 2 : true;
$_indPML = $_postMaxLen < 1000000 ? 2 : true;
$_indRML = $_reqMaxLen < 1000000 ? 2 : true;
$_indRMVL = $_reqMaxVar < 350 ? 2 : true;
flushOutput( "suhosin.post.max_vars (4096 or better recommended)...", $_indPMV, "Your value: {$_postMaxVars}. Can prevent some forms (especially in the ACP) from saving properly." );
flushOutput( "suhosin.request.max_vars (4096 or better recommended)...", $_indRMV, "Your value: {$_reqMaxVars}. Can prevent some forms (especially in the ACP) from saving properly." );
flushOutput( "suhosin.get.max_value_length (2000 or better recommended)...", $_indGML, "Your value: {$_postMaxLen}. Can prevent very long URLs from loading correctly." );
flushOutput( "suhosin.post.max_value_length (1000000 or better recommended)...", $_indPML, "Your value: {$_postMaxLen}. Can prevent very large posts or other form submissions from saving properly." );
flushOutput( "suhosin.request.max_value_length (1000000 or better recommended)...", $_indRML, "Your value: {$_reqMaxLen}. Can prevent very large posts or other form submissions from saving properly." );
flushOutput( "suhosin.request.max_varname_length (350 or better recommended)...", $_indRMVL, "Your value: {$_reqMaxVar}. Can prevent long friendly URLs from loading correctly." );
}
$testtext="тестовый текст в кодировке utf-8";
$pcre=($testtext == preg_replace( '/(^|\W)дир(\W|$)/iu', "\\1замена\\2", $testtext ))?true:false;
flushOutput( "Проверка расширения PCRE на правильную работу со строками в формате UTF-8...", $pcre, "Библиотека PCRE неправильно обрабатывает регулярные выражения в кодировке UTF-8, обратитесь к хостинг-провайдеру для исправления этой ошибки. Неправильная работа этой функции может привести к ошикам при работе с русскими именами пользователей, ошибкам фильтра нецензурных слов и т.д." );
flushOutput( 'Проверка функции filter_var()...', function_exists ( 'filter_var' ), 'Функция отсутствует, это может привести к фатальным ошибкам php и остановке выполнения скриптов' );
//-----------------------------------------
// Flush output function
//-----------------------------------------
function flushOutput( $checking, $result, $errorText )
{
print "" . $checking;
if( $result === 2 )
{
print "ВНИМАНИЕ
{$errorText}";
}
else if( !$result )
{
print "ОШИБКА
{$errorText}";
}
else
{
print "ОК";
}
print "
";
flush();
@ob_flush();
return true;
}
?>
Имейте в виду, что MySQL версии 4.1 или выше (MySQL 5.0 рекомендуется) необходим IP.Board . Попросите администратора вашего сервера проверить версию MySQL если не уверены.