280 lines
13 KiB
PHP
280 lines
13 KiB
PHP
<?php
|
|
|
|
define( 'IPB_VERSION', '3.4' );
|
|
|
|
?>
|
|
<!DOCTYPE html
|
|
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
|
<title>IP.Board <?php print IPB_VERSION; ?> - Requirements Checker</title>
|
|
<style type='text/css'>
|
|
.pass {
|
|
color: green;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.fail {
|
|
color: red;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.warn {
|
|
color: orange;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.what-you-should-do {
|
|
color: grey;
|
|
font-size: 12px;
|
|
font-style: italic;
|
|
padding-left: 15px;
|
|
}
|
|
|
|
h1 {
|
|
border-bottom: 1px solid black;
|
|
}
|
|
|
|
p {
|
|
margin: 2px;
|
|
padding: 4px;
|
|
border-bottom: 1px dotted grey;
|
|
font-size: 15px;
|
|
font-family: "Arial, Verdana";
|
|
}
|
|
|
|
p.final {
|
|
border-bottom: 0px;
|
|
padding-top: 20px;
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<h1>IP.Board <?php print IPB_VERSION; ?> Requirements Checker</h1>
|
|
|
|
<?php
|
|
|
|
$extensions = get_loaded_extensions();
|
|
$version = phpversion();
|
|
$minVersion = '5.2.0';
|
|
|
|
//-----------------------------------------
|
|
// Checking against required version
|
|
//-----------------------------------------
|
|
|
|
$checkRequiredVersion = version_compare( $minVersion, $version, '<=' );
|
|
flushOutput( "Проверка версии PHP (минимум - {$minVersion})...", $checkRequiredVersion, "Вы должны установить PHP версии {$minVersion} или выше для запуска IP.Board " . IPB_VERSION . ". Сейчас работает версия {$version}. Пожалуйста, свяжитесь с вашим хостинг-провайдером для обновления PHP до версии {$minVersion} или выше." );
|
|
|
|
print "<p>You are running PHP <strong>{$version}</strong></p>";
|
|
|
|
//-----------------------------------------
|
|
// 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. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки <a href='http://www.php.net/manual/ru/spl.setup.php'>библиотеки SPL</a>." );
|
|
|
|
//-----------------------------------------
|
|
// Checking for DOM XML
|
|
//-----------------------------------------
|
|
|
|
$domXML = in_array( 'dom', $extensions );
|
|
flushOutput( "Проверка обработки DOM XML...", $domXML, "IP.Board " . IPB_VERSION . " требуется расширение обработчика DOM XML. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки <a href='http://www.php.net/manual/ru/dom.setup.php'>библиотеки libxml2</a>." );
|
|
|
|
//-----------------------------------------
|
|
// Check for GD2
|
|
//-----------------------------------------
|
|
|
|
$gd2 = in_array( 'gd', $extensions );
|
|
flushOutput( "Проверка библиотеки GD...", $gd2, "IP.Board " . IPB_VERSION . " требуется библиотека GD2. Пожалуйста, свяжитесь с вашим хостинг-провайдером для установки <a href='http://us.php.net/manual/ru/image.setup.php'>библиотеки libgd</a>." );
|
|
|
|
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, и обновите <a href='http://us.php.net/manual/ru/image.setup.php'>библиотеку libgd</a> при необходимости." );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Checking for mysql extension
|
|
//-----------------------------------------
|
|
|
|
$mysql = in_array( 'mysql', $extensions );
|
|
$mysqli = in_array( 'mysqli', $extensions );
|
|
flushOutput( "Проверка mysql...", ( $mysql OR $mysqli ), "Ваш сервер не имеет библиотеки mysql, попросите хостера установить поддержку <a href='http://us.php.net/manual/ru/mysqli.setup.php'>mysqli</a>." );
|
|
|
|
if( $mysql AND !$mysqli )
|
|
{
|
|
flushOutput( "Проверка поддержки mysqli...", false, "Расширение mysqli рекомендуется вместо стандартного интерфейса mysql. Форум может обойтись и без него, но, если возможно, установите <a href='http://us.php.net/manual/ru/mysqli.setup.php'>его</a> для улучшения скорости и безопасности работы." );
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
// Checking for JSON
|
|
//-----------------------------------------
|
|
|
|
$json = in_array( 'json', $extensions );
|
|
flushOutput( "Проверка JSON...", $json, "Расширение PHP JSON необходимо для функционирования форума. Узнайте как установить <a href='http://us.php.net/manual/ru/json.setup.php'>расширение json</a>." );
|
|
|
|
//-----------------------------------------
|
|
// Checking for openSSL
|
|
//-----------------------------------------
|
|
|
|
$openssl = in_array( 'openssl', $extensions ) ? true : 2;
|
|
flushOutput( "Проверка openSSL...", $openssl, "OpenSSL необходим для модулей связи с Facebook, Twitter, и модуля Subscription Manager. Если вы не используете ни один из этих модулей, то можно обойтись без этого расширения, иначе вам необходимо установить<a href='http://us2.php.net/manual/ru/openssl.installation.php'> расширение openssl</a>." );
|
|
|
|
//-----------------------------------------
|
|
// 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 "<p>" . $checking;
|
|
|
|
if( $result === 2 )
|
|
{
|
|
print "<span class='warn'>ВНИМАНИЕ</span><br /><span class='what-you-should-do'>{$errorText}</span>";
|
|
}
|
|
else if( !$result )
|
|
{
|
|
print "<span class='fail'>ОШИБКА</span><br /><span class='what-you-should-do'>{$errorText}</span>";
|
|
}
|
|
else
|
|
{
|
|
print "<span class='pass'>ОК</span>";
|
|
}
|
|
|
|
print "</p>";
|
|
|
|
flush();
|
|
@ob_flush();
|
|
|
|
return true;
|
|
}
|
|
|
|
?>
|
|
|
|
<p class='final'>Имейте в виду, что MySQL версии 4.1 или выше (MySQL 5.0 рекомендуется) необходим IP.Board <?php print IPB_VERSION; ?>. Попросите администратора вашего сервера проверить версию MySQL если не уверены.</p>
|
|
</body>
|
|
</html>
|