document.location="?UPDATE_SUCCESS=Y";';
die();
}
else
$strError = str_replace("#FILE#", $this_script_name, GM("LOADER_LOAD_CANT_OPEN_WRITE"));
}
else
$strError = GM('LOADER_NEW_VERSION');
}
break;
}
}
fclose($res);
}
}
if ($strError)
echo '
'.$strError.'
';
// Web server
debug(__LINE__);
$strSERVER_SOFTWARE = $_SERVER["SERVER_SOFTWARE"];
if (strlen($strSERVER_SOFTWARE)<=0)
$strSERVER_SOFTWARE = $_SERVER["SERVER_SIGNATURE"];
$strSERVER_SOFTWARE = trim($strSERVER_SOFTWARE);
if (@preg_match("#^([a-zA-Z-]+).*?([\d]+\.[\d]+(\.[\d]+)?)#i", $strSERVER_SOFTWARE, $arSERVER_SOFTWARE))
{
$strWebServer = $arSERVER_SOFTWARE[1];
$strWebServerVersion = $arSERVER_SOFTWARE[2];
$val = $strWebServer." ".$strWebServerVersion;
} else {
$val = GM("NA");
}
$pr=array(GM('WEB_SERVER'),GM('WEB_SERVER_DESC'),1);
show($pr,$val);
// CGI or not
debug(__LINE__);
$pr=array(GM('SAPI'),GM('SAPI_DESC'));
$sapi = strtolower(php_sapi_name());
show($pr,$sapi,$sapi=='cgi');
// PHP version
debug(__LINE__);
$pr=array(GM('PHP_VER'),GM('PHP_VER_DESC'),1);
show($pr,phpversion(),version_compare(phpversion(),$PHP_MIN,'<'));
// Safe mode
debug(__LINE__);
$val=intval(ini_get("safe_mode"));
$pr=array("Safe mode",GM('SAFE_DESC'),1);
show($pr,$val,$val);
// short_open_tag
debug(__LINE__);
$val = ini_get("short_open_tag") == 1 || strtoupper(ini_get("short_open_tag")) == 'ON';
$pr=array(GM('SHORT_TAG'),GM('SHORT_TAG_DESC'),1);
show($pr,$val,!$val);
// Memory limit
debug(__LINE__);
$val=ini_get('memory_limit')?ini_get('memory_limit'):get_cfg_var("memory_limit");
$pr=array(GM('MEM_LIMIT'),GM('MEM_LIMIT_DESC'),1);
show($pr,$val);
// Test memory limit
debug(__LINE__);
$pr=array(GM('MEM_FACT'),GM('MEM_FACT_DESC'),1);
show($pr,"
".GM('NOT_TESTED')."
");
// Mail()
debug(__LINE__);
$pr=array(GM('SENDMAIL'),GM('SENDMAIL_DESC'),1);
if ($bTest)
{
$t = time();
$val = mail("hosting_test@bitrix.ru","Bitrix server test","This is test message. Delete it.");
$tt = time() - $t;
show($pr,($val?GM('YES'):GM('NO')).($tt?" (".GM('TIME').": $tt ".GM('SEC').")":""),!$val||$tt>1);
}
else
show($pr,'
'.GM('NOT_TESTED').'');
// socket
debug(__LINE__);
$val = $socket = function_exists('fsockopen');
$pr=array(GM('SOCK_TEST'),GM('SOCK_TEST_DESC'),1);
show($pr,$val,!$val);
// Session data
debug(__LINE__);
$_SESSION['session_test'] = 'ok';
$pr=array(GM('TEST_SESS'),GM('TEST_SESS_DESC'),1);
show($pr,"
".GM('NOT_TESTED')."
");
session_write_close();
// Session without UserAgent test: for upload applet
debug(__LINE__);
$ok = false;
$host = $_SERVER['SERVER_NAME'] ? $_SERVER['SERVER_NAME'] : 'localhost';
$port = $_SERVER['SERVER_PORT'] ? $_SERVER['SERVER_PORT'] : 80;
if ($bTest)
{
$pr=array(GM('TEST_SESS_UA'),GM('TEST_SESS_UA_DESC'),1);
if ($socket)
$res = fsockopen(($port == 443 ? 'ssl://' : '').$host, $port, $errno, $errstr, 3);
else
$res = false;
if($res)
{
$strRequest = "GET ".dirname($_SERVER['PHP_SELF'])."/bitrix_server_test.php?session_test=Y HTTP/1.1\r\n";
$strRequest.= "Host: ".$host."\r\n";
$strRequest.= "Cookie: ".session_name()."=".session_id()."\r\n";
$strRequest.= "\r\n";
$strRes = getHttpResponse($res, $strRequest);
fclose($res);
if (trim($strRes) == "SUCCESS")
$val = $ok = GM('YES');
else
$val = GM('NO');
}
else
$val=GM('NO_CONNECT');
show($pr,$val,!$ok);
}
// Update system
debug(__LINE__);
$pr=array(GM('SYSUPDATE'),GM('SYSUPDATE_DESC'),1);
if ($bTest)
{
$ok = 0;
if ($socket)
$res = fsockopen("www.1c-bitrix.ru", "80", $errno, $errstr, 3);
else
$res = false;
if($res)
{
$strRequest = "POST /bitrix/updates/sysserver.php HTTP/1.1\r\n";
$strRequest.= "User-Agent: BitrixSMUpdater\r\n";
$strRequest.= "Accept: */*\r\n";
$strRequest.= "Host: www.1c-bitrix.ru\r\n";
$strRequest.= "Accept-Language: en\r\n";
$strRequest.= "Content-type: application/x-www-form-urlencoded\r\n";
$strRequest.= "Content-length: 7\r\n\r\n";
$strRequest.= "lang=en";
$strRequest.= "\r\n";
$strRes = getHttpResponse($res, $strRequest);
fclose($res);
if (strtolower(strip_tags($strRes)) == "license key is required")
$val = $ok = 1;
else
$val = GM('WRONG_ANS')."
>>";
}
else
$val=GM('NO_CONNECT');
show($pr,$val,!$ok);
}
else
show($pr,'
'.GM('NOT_TESTED').'');
// HTTP Auth
debug(__LINE__);
$ok = false;
$pr=array(GM('HTTP_AUTH'),GM('1C_1').$host.GM('1C_2').$port.GM('1C_3'),2);
if ($bTest)
{
if ($socket)
$res = fsockopen(($port == 443 ? 'ssl://' : '').$host, $port, $errno, $errstr, 3);
else
$res = false;
if($res)
{
$url = parse_url($_SERVER['REQUEST_URI']);
$strRequest = "GET ".$url['path']."?auth_test=Y HTTP/1.1\r\n";
$strRequest.= "Host: ".$host."\r\n";
$strRequest.= "Authorization: Basic dGVzdF91c2VyOnRlc3RfcGFzc3dvcmQ=\r\n";
$strRequest.= "\r\n";
$strRes = getHttpResponse($res, $strRequest);
fclose($res);
if (trim($strRes) == "SUCCESS")
{
$val = $ok = GM('YES');
if ($_SERVER['REMOTE_USER'])
$val .= ' ($_SERVER["REMOTE_USER"])';
elseif ($_SERVER['REDIRECT_REMOTE_USER'])
$val .= ' ($_SERVER["REDIRECT_REMOTE_USER"])';
}
else
$val = GM('NO');
}
else
$val=GM('NO_CONNECT');
show($pr,$val,!$ok);
}
else
show($pr,'
'.GM('NOT_TESTED').'');
// Set time limit
#debug(__LINE__);
#$pr=array(GM('SET_TM'),GM('SET_TM_DESC'),2);
#@set_time_limit(300);
#@ini_set('max_execution_time',300);
#$tl=(ini_get('max_execution_time')==300);
#show($pr,$tl,!$tl);
$pr=array(GM('TIME_TEST'),GM('TIME_TEST_DESC'),2);
show($pr,"
".GM('NOT_TESTED')."
");
$pr=array(GM('TIME_TEST_CPU'),GM('TIME_TEST_CPU_DESC'),2);
show($pr,"
".GM('NOT_TESTED')."
");
// Accelerator
debug(__LINE__);
$res = "";
$pr = array(GM('PHP_ACC'),GM('PHP_ACC_DESC'),2);
if ($val = function_exists("eaccelerator_info"))
{
$res = "EAccelerator";
$val = false;
}
elseif($val = function_exists("accelerator_reset"))
{
$res = 'Zend Accelerator
есть проблема';
$val = false;
}
elseif($val = function_exists("apc_fetch"))
$res = "APC";
elseif($val = function_exists("xcache_get"))
$res = "XCache";
elseif(($val = function_exists("opcache_reset")) && ini_get('opcache.enable'))
$res = "OPcache";
show($pr,$res?GM('YES').' ('.$res.')':GM('NOT_FOUND'),!$val);
// max_input_vars
if ($m = ini_get('max_input_vars'))
{
$pr = array('max_input_vars',GM('max_input_vars'),2);
show($pr, $m, $m < 10000);
}
?>
'.GM('NOT_TESTED').'');
if ($dir)
{
// dirinfo
debug(__LINE__);
show(GM('F_NEW_PERM'),dirinfo($dir));
// Folder delete
debug(__LINE__);
$val=rmdir($dir);
show(array(GM('F_DELETE'),'',1), $val==false?GM('ERROR'):1, !$val);
}
// File create
debug(__LINE__);
$file = false;
$pr=array(GM('FL_CREATE'),GM('FL_CREATE_D'),1);
if ($bTest)
{
$file=create_tmp_file();
show($pr, $file==false?GM('ERROR'):1, $file==false);
}
else
show($pr,'
'.GM('NOT_TESTED').'');
if ($file)
{
// dirinfo
debug(__LINE__);
show(GM('FL_PERM'),dirinfo($file));
// File delete
debug(__LINE__);
$del=unlink($file);
show(array(GM('FL_DEL'),'',1), $val==false?GM('ERROR'):1, !$val);
}
// File exec
debug(__LINE__);
$pr=array(GM('FL_EXEC'),GM('FL_EXEC_D'),1);
$ok = false;
$host = $_SERVER['SERVER_NAME'] ? $_SERVER['SERVER_NAME'] : 'localhost';
$port = $_SERVER['SERVER_PORT'] ? $_SERVER['SERVER_PORT'] : 80;
$val = GM('NOT_TESTED');
if ($file && $bTest)
{
$fn=$_SERVER['DOCUMENT_ROOT'].dirname($_SERVER['PHP_SELF'])."/bitrix_test_exec.php";
$f=fopen($fn,"wb");
$data='';
fputs($f,$data);
fclose($f);
if ($socket)
$res = fsockopen(($port == 443 ? 'ssl://' : '').$host, $port, $errno, $errstr, 3);
else
$res = false;
if($res)
{
$strRequest = "GET ".dirname($_SERVER['PHP_SELF'])."/bitrix_test_exec.php HTTP/1.1\r\n";
$strRequest.= "Host: ".$host."\r\n";
$strRequest.= "\r\n";
$strRes = getHttpResponse($res, $strRequest);
fclose($res);
if (trim($strRes) == "SUCCESS")
$val = $ok = GM('YES');
else
$val = GM('NO');
}
else
$val=GM('NO_CONNECT');
show($pr,$val,!$ok);
unlink($fn);
}
else
show($pr,$val,!$ok);
// .htaccess
debug(__LINE__);
$ok = false;
$host = $_SERVER['SERVER_NAME'] ? $_SERVER['SERVER_NAME'] : 'localhost';
$port = $_SERVER['SERVER_PORT'] ? $_SERVER['SERVER_PORT'] : 80;
$pr=array(GM('HTACCESS'),GM('HTACCESS_D'),1);
if ($bTest && $file && $dir && prepare_htaccess_test())
{
if ($socket)
$res = fsockopen(($port == 443 ? 'ssl://' : '').$host, $port, $errno, $errstr, 3);
else
$res = false;
if($res)
{
$strRequest = "GET ".dirname($_SERVER['PHP_SELF'])."/bitrix_htaccess_test/test_file.php HTTP/1.1\r\n";
$strRequest.= "Host: ".$host."\r\n";
$strRequest.= "\r\n";
$strRes = getHttpResponse($res, $strRequest);
fclose($res);
if (false!==strpos($strRes,"SUCCESS"))
$val = $ok = GM('YES');
else
$val = GM('NO');
}
else
$val=GM('NO_CONNECT');
show($pr,$val,!$ok);
clear_htaccess_test();
}
else
show($pr,GM('NOT_TESTED'),1);
// Filesystem benchmark
debug(__LINE__);
$pr=array(GM('FS_TIME'),GM('FS_TIME_D'));
if ($bTest && $file && $dir)
{
function xmktime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$t = xmktime();
$path = dirname(__FILE__).'/bx_fs_test';
mkdir($path);
$res = true;
for($i=0;$i<1000;$i++)
{
if (!(($f = fopen($path.'/bx_test_file_'.$i,'wb')) && fwrite($f, '') && fclose($f)))
{
$res = false;
break;
}
include($path.'/bx_test_file_'.$i);
}
if ($res)
for($i=0;$i<1000;$i++)
if (!unlink($path.'/bx_test_file_'.$i))
{
$res = false;
break;
}
rmdir($path);
$time = round(xmktime()-$t,2);
show($pr,$res ? $time : GM('ERROR'),$time>5);
}
else
show($pr,GM('NOT_TESTED'),1);
// File uploads
debug(__LINE__);
$val=intval(ini_get('file_uploads'));
show(array(GM('FILE_UPL'),'',1),$val,!$val);
$tmp_name=@$_FILES['test_file']['tmp_name'];
$pr=array(GM('FILE_UPL_TEST'),GM('FILE_UPL_TEST_D'),1);
if (is_uploaded_file($tmp_name)) {
$val=move_uploaded_file($tmp_name,$image_file);
show($pr,$val==false?GM('ERROR'):1,$val==false);
$pr=array(GM('IMG'),GM('IMG_D'));
show($pr,"
");
} else {
echo "
";
}
?>
'.GM('NOT_TESTED').'');
// mbstring
debug(__LINE__);
$val=intval(function_exists("mb_substr"));
$pr=array(GM('MBSTR'),GM('MBSTR_D'),1);
show($pr,$val,!$val);
if ($val && $lang=='ru')
{
$utf = false!==strpos(strtolower(ini_get('mbstring.internal_encoding')),'utf') && ini_get('mbstring.func_overload')==2;
show(array("Включен режим UTF для mbstring"),$utf);
/*
$text0 = $utf ? "\xd0\xa2\xd0\xb5\xd0\xa1\xd1\x82" : 'ТеСт';
$text1 = $utf ? "\xd1\x82\xd0\xb5\xd1\x81\xd1\x82" : 'тест';
$res = strtolower($text0);
$val = $res==$text1 || $res==$text0;
show(array("Работа функции strtolower",'Тестируется функция strtolower для русских букв. Важно чтобы не было обратного преобразования: "ТеСт" -> "ТЕСТ" вместо "тест"',1),$val,!$val);
$l = strlen("\xd0\xa2");
$val = $utf && $l==1 || !$utf && $l==2;
show(array("Работа функции strlen",'',1),$val,!$val);
*/
}
?>
'.GM('NOT_TESTED').'');
echo "
";
?>
".GM('OPEN')."");
// umask
$pr=array("umask",'');
show($pr,sprintf("%03o",umask()));
//post_max_size
$pr=array(GM('POST_MS'),'');
$val=ini_get("post_max_size");
show($pr,$val);
// Display errors
$val=intval(ini_get('display_errors'));
if (version_compare(phpversion(), '5.4', '<'))
show("Display errors",$val);
show("Server time",date("d.m.Y H:i"));
show("phpinfo()","
".GM('OPEN')."");
show("Language","
ru /
en");
show("Delete bitrix_server_test.php file","
delete");
##############################################
function show($in_param,$value,$red='no') {
if (is_array($in_param)) {
$param=$in_param[0];
$help=$in_param[1];
$lvl=@$in_param[2];
} else {
$param=$in_param;
}
if ($red==1)
$color='red';
elseif (!$red)
$color='green';
else
$color='#000000';
if ($value=='1')
$value=GM('YES');
elseif ($value=='0')
$value=GM('NO');
if (@$lvl>0 && $lvl<=@$_REQUEST['test'])
$bold='style="font-weight:bold"';
else
$bold='';
@print("
");
}
function dirinfo($dir) {
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$perm=substr(sprintf('%o', @fileperms($dir)), -4);
$user=posix_getpwuid(fileowner($dir));
$group=posix_getgrgid(filegroup($dir));
return $perm." ".$user['name']." ".$group['name'];
} else {
return "N/A";
}
}
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function create_tmp_folder()
{
$name=check_file_name(dirname(__FILE__).'/'.'bx_folder_test');
mkdir($name);
if (file_exists($name))
return $name;
else
return false;
}
function create_tmp_file()
{
$name=check_file_name(dirname(__FILE__).'/'.'bx_file_test');
$f=fopen($name,'wb');
if ($f) fclose($f);
if (file_exists($name))
return $name;
else
return false;
}
function check_file_name($name)
{
if (file_exists($name))
return check_file_name($name."_tmp");
else
return $name;
}
function create_tmp_table($innodb=false)
{
$name='bx_test';
while (true)
{
$name.='_tmp';
$res=bx_mysql_query("SHOW TABLES LIKE '".$name."'");
if ($res)
{
if (!bx_mysql_fetch_row($res))
{
if ($innodb && bx_mysql_query("CREATE TABLE ".$name." (tst varchar(100), tst2 varchar(50), tst3 varchar(30), tst4 text) ENGINE=INNODB"))
return $name;
elseif (!$innodb && bx_mysql_query("CREATE TABLE ".$name." (tst varchar(100), tst2 varchar(50), tst3 varchar(30), tst4 text) ENGINE=MYISAM"))
return $name;
else
return false;
}
} else
return false;
}
}
function prepare_htaccess_test()
{
$self = str_replace("\\","/",$_SERVER['PHP_SELF']);
$path = dirname($self)."/bitrix_htaccess_test";
$dir = $_SERVER['DOCUMENT_ROOT'].$path;
clear_htaccess_test();
if (!mkdir($dir)) return;
$f=fopen($dir."/.htaccess","wb");
$str = "ErrorDocument 404 ".$path."/404.php\n".
"
\n".
" RewriteEngine Off\n".
"";
fputs($f, $str);
fclose($f);
if (!file_exists($dir."/.htaccess")) return;
$f=fopen($dir."/404.php","wb");
$str = "";
fputs($f, $str);
fclose($f);
if (!file_exists($dir."/404.php")) return;
return true;
}
function clear_htaccess_test()
{
$self = str_replace("\\","/",$_SERVER['PHP_SELF']);
$dir = $_SERVER['DOCUMENT_ROOT'].dirname($self)."/bitrix_htaccess_test";
if (file_exists($dir))
{
unlink($dir."/.htaccess");
unlink($dir."/404.php");
rmdir($dir);
}
}
function getHttpResponse($res, $strRequest)
{
fputs($res, $strRequest);
$bChunked = False;
while (($line = fgets($res, 4096)) && $line != "\r\n")
{
if (@preg_match("/Transfer-Encoding: +chunked/i", $line))
$bChunked = True;
elseif (@preg_match("/Content-Length: +([0-9]+)/i", $line, $regs))
$length = $regs[1];
}
$strRes = "";
if ($bChunked)
{
$maxReadSize = 4096;
$length = 0;
$line = fgets($res, $maxReadSize);
$line = strtolower($line);
$strChunkSize = "";
$i = 0;
while ($i < strlen($line) && in_array($line[$i], array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")))
{
$strChunkSize .= $line[$i];
$i++;
}
$chunkSize = hexdec($strChunkSize);
while ($chunkSize > 0)
{
$processedSize = 0;
$readSize = (($chunkSize > $maxReadSize) ? $maxReadSize : $chunkSize);
while ($readSize > 0 && $line = fread($res, $readSize))
{
$strRes .= $line;
$processedSize += strlen($line);
$newSize = $chunkSize - $processedSize;
$readSize = (($newSize > $maxReadSize) ? $maxReadSize : $newSize);
}
$length += $chunkSize;
$line = fgets($res, $maxReadSize);
$line = fgets($res, $maxReadSize);
$line = strtolower($line);
$strChunkSize = "";
$i = 0;
while ($i < strlen($line) && in_array($line[$i], array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")))
{
$strChunkSize .= $line[$i];
$i++;
}
$chunkSize = hexdec($strChunkSize);
}
}
elseif ($length)
$strRes = fread($res, $length);
else
while ($line = fread($res, 4096))
$strRes .= $line;
return $strRes;
}
function GM($code)
{
global $M;
return $M[$code];
}
function debug($line)
{
static $f, $fail, $file;
if (!$_REQUEST['debug'] || $fail)
return;
if (!$f)
{
if ($f = fopen(dirname(__FILE__).'/bitrix_server_test.log','wb'))
$file = @file(__FILE__);
else
$fail = 1;
}
fwrite($f,date('H:i:s')."\t".$line."\t".trim($file[$line-2])."\n");
}
######################################################################?>