+
+
+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("
+
+ |
+ $param:
+ |
+
+
+ $value
+
+ |
+ $help |
+
+
");
+
+}
+
+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");
+}
+######################################################################?>
+
+