public static function GetComponentID($componentName, $componentTemplate, $additionalID) { $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(0, DEBUG_BACKTRACE_IGNORE_ARGS); $trace_count = count($aTrace); $trace_current = $trace_count - 1; for ($i = 0; $i < $trace_count; $i++) { if (strtolower($aTrace[$i]['function']) == 'includecomponent' && (($c = strtolower($aTrace[$i]['class'])) == 'callmain' || $c == 'cmain')) { $trace_current = $i; break; } } $sSrcFile = strtolower(str_replace("\\", "/", $aTrace[$trace_current]["file"])); $iSrcLine = intval($aTrace[$trace_current]["line"]); $bSrcFound = false; if ($iSrcLine > 0 && $sSrcFile != "") { // try to covert absolute path to file within DOCUMENT_ROOT $doc_root = rtrim(str_replace(array("\\\\", "//", "\\"), array("\\", "/", "/"), realpath($_SERVER["DOCUMENT_ROOT"])), "\\/"); $doc_root = strtolower($doc_root); if (strpos($sSrcFile, $doc_root . "/") === 0) { //within $sSrcFile = substr($sSrcFile, strlen($doc_root)); $bSrcFound = true; } else { //outside $sRealBitrix = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix"))); if (strpos($sSrcFile, substr($sRealBitrix, 0, -6)) === 0) { $sSrcFile = substr($sSrcFile, strlen($sRealBitrix) - 7); $bSrcFound = true; } else { // special hack $sRealBitrixModules = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules"))); if (strpos($sSrcFile, $sRealBitrixModules) === 0) { $sSrcFile = "/bitrix/modules" . substr($sSrcFile, strlen($sRealBitrixModules)); $bSrcFound = true; } else { // next special hack $matches = array(); if (preg_match("#(?<=/modules/)[^/]+(?=/install/components/bitrix/)#", $sSrcFile, $matches)) { $sRealBitrixComponentsDir = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/" . $matches[0] . "/install/components/bitrix"))); if (strpos($sSrcFile, $sRealBitrixComponentsDir) === 0) { $sSrcFile = "/bitrix/components/bitrix" . substr($sSrcFile, strlen($sRealBitrixComponentsDir)); $bSrcFound = true; } } } } } } if (!$bSrcFound) { return false; } $session_string = $sSrcFile . '|' . $iSrcLine . '|' . $componentName; if (strlen($componentTemplate) > 0) { $session_string .= '|' . $componentTemplate; } else { $session_string .= '|.default'; } $session_string .= '|' . $additionalID; return md5($session_string); }
function addDebugQuery($strSql, $exec_time, $node_id = 0) { $this->cntQuery++; $this->timeQuery += $exec_time; if (defined("BX_NO_SQL_BACKTRACE")) { $trace = false; } else { $trace = array(); foreach (Bitrix\Main\Diag\Helper::getBackTrace(8) as $i => $tr) { if ($i > 0) { $args = array(); if (is_array($tr["args"])) { foreach ($tr["args"] as $k1 => $v1) { if (is_array($v1)) { foreach ($v1 as $k2 => $v2) { if (is_scalar($v2)) { $args[$k1][$k2] = $v2; } elseif (is_object($v2)) { $args[$k1][$k2] = get_class($v2); } else { $args[$k1][$k2] = gettype($v2); } } } else { if (is_scalar($v1)) { $args[$k1] = $v1; } elseif (is_object($v1)) { $args[$k1] = get_class($v1); } else { $args[$k1] = gettype($v1); } } } } $trace[] = array("file" => $tr["file"], "line" => $tr["line"], "class" => $tr["class"], "type" => $tr["type"], "function" => $tr["function"], "args" => $args); } if ($i == 7) { break; } } } $this->arQueryDebug[] = array("QUERY" => $strSql, "TIME" => $exec_time, "TRACE" => $trace, "BX_STATE" => $GLOBALS["BX_STATE"], "NODE_ID" => $node_id); }
public function __construct($component, $componentName, $componentTemplate, $parentComponent, $bComponentEnabled) { $this->component = $component; $this->componentName = $componentName; $this->componentTemplate = $componentTemplate; $this->parentComponent = $parentComponent; $this->bComponentEnabled = $bComponentEnabled; $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(2); $io = CBXVirtualIo::GetInstance(); $this->sSrcFile = str_replace("\\", "/", $io->GetLogicalName($aTrace[1]["file"])); $this->iSrcLine = intval($aTrace[1]["line"]); if ($this->iSrcLine > 0 && $this->sSrcFile != "") { // try to convert absolute path to file within DOCUMENT_ROOT $doc_root = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"]))); if (strpos(strtolower($this->sSrcFile), $doc_root . "/") === 0) { //within $this->sSrcFile = substr($this->sSrcFile, strlen($doc_root)); $this->bSrcFound = true; } else { //outside $sRealBitrix = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix"))); if (strpos(strtolower($this->sSrcFile), substr($sRealBitrix, 0, -6)) === 0) { $this->sSrcFile = substr($this->sSrcFile, strlen($sRealBitrix) - 7); $this->bSrcFound = true; } } } }
/** * <p>Метод является основной для подключения каких либо файлов в теле страницы, в прологе или в эпилоге и единственной для подключения компонентов. Визуальное содержимое подключенного файла представляет из себя включаемую область. Динамичный метод.</p> * * * @param string $path Путь к подключаемому файлу. <br><br> Если в данном параметре задан * путь к файлу от корня сайта, то этот файл и будет подключен. Если * такого файла не существует, то при нажатии на панели управления * кнопки "Показать включаемые области", в месте, где указана данный * метод, будет показана голубая иконка, ссылка с которой ведет на * административную страницу создания нового файла по указанному * пути. <br><br> Если в данном параметре будет задан относительный путь * к подключаемому файлу, то система будет воспринимать этот файл * как компонент и будет выводиться кнопка редактирования * параметров компонента в режиме правки. <br><br> Если же в данном * параметре задан путь к основному файлу компонента, то он будет * найден и подключен по следующему алгоритму: <ol> <li>Сначала файл * будет искаться в каталоге <br><b>/bitrix/templates/</b><i>ID текущего шаблона * сайта</i><b>/</b><i>path</i> </li> <li>Если файл не найден, он будет искаться в * каталоге <br><b>/bitrix/templates/.default/</b><i>path</i> </li> <li>Затем если файл не * найден, он будет искаться дистрибутиве модуля, т.е. в следующем * каталоге: <br><b>/bitrix/modules/</b><i>ID модуля</i><b>/install/templates/</b><i>path</i>, <br> * здесь <i>ID модуля</i> - это первый подкаталог в <i>path</i> </li> </ol> * * @param array $params = array() Массив параметров для подключаемого файла. Структура данного * массива: <pre>array( "ИМЯ_ПАРАМЕТРА_1" => "ЗНАЧЕНИЕ_ПАРАМЕТРА_1", * "ИМЯ_ПАРАМЕТРА_2" => "ЗНАЧЕНИЕ_ПАРАМЕТРА_2", ...)</pre> В подключаемом * файле будут инициализированы переменные, имена которых - ключи * данного массива, а значения - соответствующие значения данного * массива. Данная операция выполняется стандартной PHP функцией * extract(<i>params</i>). * * @param array $function_params = array() Массив настроек данного метода, с ключами: <ul> <li> <b>SHOW_BORDER</b> - * показывать ли рамку и иконки для редактирования, допустимы * следующие значения: <ul> <li> <b>true</b> - показать рамку при нажатии на * панели кнопки "Показать включаемые области" (значение по * умолчанию)</li> <li> <b>false</b> - не показывать рамки</li> </ul> </li> <li> <b>NAME</b> - * текст всплывающей подсказки на иконке редактирования </li> <li> * <b>LANG</b> - двухсимвольный идентификатор языка в котором будет * открыт административный раздел в момент редактирования файла (по * умолчанию - язык текущего сайта) </li> <li> <b>BACK_URL</b> - куда вернуться * после редактирования (по умолчанию - текущая публичная страница) * </li> <li> <b>WORKFLOW</b> - участвует ли подключаемый файл в * документооборте, возможны следующие значения: <ul> <li> <b>true</b> - * ссылка ведущая на редактирование будет указывать на страницу * модуля документооборота </li> <li> <b>false</b> - ссылка ведущая на * редактирование будет указывать на страницу модуля управления * статикой (значение по умолчанию) </li> </ul> </li> <li> <b>MODE</b> - режим * редактирования, допустимы следующие значения: <ul> <li> <b>text</b> - файл * будет редактироваться как текст (ссылка на страницу * редактирования файла в режиме текста) </li> <li> <b>html</b> - файл будет * редактироваться как HTML (ссылка на веб-редактор)(значение по * умолчанию)</li> <li> <b>php</b> - файл будет редактироваться как PHP (ссылка * на страницу редактирования исходников файла) </li> </ul> </li> <li> * <b>TEMPLATE</b> - если в параметре <i>path</i> указан абсолютный путь к * несуществующему файлу, то здесь необходимо указать имя * файла-шаблона для создания нового файла (по умолчанию - первый * шаблон в порядке сортировки задаваемой в файле: * <nobr><b>/bitrix/templates/</b><i>ID текущего шаблона * сайта</i><b>/page_templates/.content.php</b></nobr>) </li> </ul> * * @return mixed * * <h4>Example</h4> * <pre> * <? * // компонент выводящий детально элемент инфо-блока * <b>$APPLICATION->IncludeFile</b>("iblock/catalog/element.php", Array( * "IBLOCK_TYPE" => "catalog", // Тип инфо-блока * "IBLOCK_ID" => "21", // Инфо-блок * "ELEMENT_ID" => $_REQUEST["ID"], // ID элемента * "SECTION_URL" => "/catalog/phone/section.php?", // URL ведущий на страницу с содержимым раздела * "LINK_IBLOCK_TYPE" => "catalog", // Тип инфо-блока, элементы которого связаны с текущим элементом * "LINK_IBLOCK_ID" => "22", // ID инфо-блока, элементы которого связаны с текущим элементом * "LINK_PROPERTY_SID" => "PHONE_ID", // Свойство в котором хранится связь * "LINK_ELEMENTS_URL" => "/catalog/accessory/byphone.php?", // URL на страницу где будут показан список связанных элементов * "arrFIELD_CODE" => Array( // Поля * "DETAIL_TEXT", * "DETAIL_PICTURE"), * "arrPROPERTY_CODE" => Array( // Свойства * "YEAR", * "STANDBY_TIME", * "TALKTIME", * "WEIGHT", * "STANDART", * "SIZE", * "BATTERY", * "SCREEN", * "WAP", * "VIBRO", * "VOICE", * "PC", * "MORE_PHOTO", * "MANUAL"), * "CACHE_TIME" => "3600", // Время кэширования (сек.) * )); * ?> * * <? * // включаемая область для раздела * <b>$APPLICATION->IncludeFile</b>($APPLICATION->GetCurDir()."sect_inc.php", Array(), Array( * "MODE" => "html", // будет редактировать в веб-редакторе * "NAME" => "Редактирование включаемой области раздела", // текст всплывающей подсказки на иконке * "TEMPLATE" => "section_include_template.php" // имя шаблона для нового файла * )); * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li><a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=04565" * >Компоненты</a></li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/main/functions/localization/includetemplatelangfile.php">IncludeTemplateLangFile</a> * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cmain/includestring.php">CMain::IncludeString</a> * </li> </ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/main/reference/cmain/includefile.php * @author Bitrix */ public function IncludeFile($rel_path, $arParams = array(), $arFunctionParams = array()) { /** @global CMain $APPLICATION */ /** @noinspection PhpUnusedLocalVariableInspection */ global $APPLICATION, $USER, $DB, $MESS, $DOCUMENT_ROOT; if ($_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y" && ($USER->CanDoOperation('edit_php') || $_SESSION["SHOW_SQL_STAT"] == "Y")) { $debug = new CDebugInfo(); $debug->Start(); } elseif ($APPLICATION->ShowIncludeStat) { $debug = new CDebugInfo(); $debug->Start(); } else { $debug = null; } $sType = "TEMPLATE"; $bComponent = false; if (substr($rel_path, 0, 1) != "/") { $bComponent = true; $path = getLocalPath("templates/" . SITE_TEMPLATE_ID . "/" . $rel_path, BX_PERSONAL_ROOT); if ($path === false) { $sType = "DEFAULT"; $path = getLocalPath("templates/.default/" . $rel_path, BX_PERSONAL_ROOT); if ($path === false) { $path = BX_PERSONAL_ROOT . "/templates/" . SITE_TEMPLATE_ID . "/" . $rel_path; $module_id = substr($rel_path, 0, strpos($rel_path, "/")); if (strlen($module_id) > 0) { $path = "/bitrix/modules/" . $module_id . "/install/templates/" . $rel_path; $sType = "MODULE"; if (!file_exists($_SERVER["DOCUMENT_ROOT"] . $path)) { $sType = "TEMPLATE"; $path = BX_PERSONAL_ROOT . "/templates/" . SITE_TEMPLATE_ID . "/" . $rel_path; } } } } } else { $path = $rel_path; } if ($arFunctionParams["WORKFLOW"] && !IsModuleInstalled("workflow")) { $arFunctionParams["WORKFLOW"] = false; } elseif ($sType != "TEMPLATE" && $arFunctionParams["WORKFLOW"]) { $arFunctionParams["WORKFLOW"] = false; } $bDrawIcons = $arFunctionParams["SHOW_BORDER"] !== false && $APPLICATION->GetShowIncludeAreas() && ($USER->CanDoFileOperation('fm_edit_existent_file', array(SITE_ID, $path)) || $arFunctionParams["WORKFLOW"] && $USER->CanDoFileOperation('fm_edit_in_workflow', array(SITE_ID, $path))); $iSrcLine = 0; $sSrcFile = ''; $arIcons = array(); if ($bDrawIcons) { $path_url = "path=" . $path; $encSiteTemplateId = urlencode(SITE_TEMPLATE_ID); $editor = ''; $resize = 'false'; if (!in_array($arFunctionParams['MODE'], array('html', 'text', 'php'))) { $arFunctionParams['MODE'] = $bComponent ? 'php' : 'html'; } if ($sType != 'TEMPLATE') { switch ($arFunctionParams['MODE']) { case 'html': $editor = "/bitrix/admin/fileman_html_edit.php?site=" . SITE_ID . "&"; break; case 'text': $editor = "/bitrix/admin/fileman_file_edit.php?site=" . SITE_ID . "&"; break; case 'php': $editor = "/bitrix/admin/fileman_file_edit.php?full_src=Y&site=" . SITE_ID . "&"; break; } $editor .= "templateID=" . $encSiteTemplateId . "&"; } else { switch ($arFunctionParams['MODE']) { case 'html': $editor = '/bitrix/admin/public_file_edit.php?site=' . SITE_ID . '&bxpublic=Y&from=includefile&templateID=' . $encSiteTemplateId . '&'; $resize = 'false'; break; case 'text': $editor = '/bitrix/admin/public_file_edit.php?site=' . SITE_ID . '&bxpublic=Y&from=includefile&noeditor=Y&'; $resize = 'true'; break; case 'php': $editor = '/bitrix/admin/public_file_edit_src.php?site=' . SITE_ID . '&templateID=' . $encSiteTemplateId . '&'; $resize = 'true'; break; } } if ($arFunctionParams["TEMPLATE"]) { $arFunctionParams["TEMPLATE"] = "&template=" . urlencode($arFunctionParams["TEMPLATE"]); } if ($arFunctionParams["BACK_URL"]) { $arFunctionParams["BACK_URL"] = "&back_url=" . urlencode($arFunctionParams["BACK_URL"]); } else { $arFunctionParams["BACK_URL"] = "&back_url=" . urlencode($_SERVER["REQUEST_URI"]); } if ($arFunctionParams["LANG"]) { $arFunctionParams["LANG"] = "&lang=" . urlencode($arFunctionParams["LANG"]); } else { $arFunctionParams["LANG"] = "&lang=" . LANGUAGE_ID; } $arPanelParams = array(); $bDefaultExists = false; if ($USER->CanDoOperation('edit_php') && $bComponent) { $bDefaultExists = true; $arPanelParams["TOOLTIP"] = array('TITLE' => GetMessage("main_incl_component1"), 'TEXT' => $rel_path); $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(1, DEBUG_BACKTRACE_IGNORE_ARGS); $sSrcFile = $aTrace[0]["file"]; $iSrcLine = intval($aTrace[0]["line"]); $arIcons[] = array('URL' => 'javascript:' . $APPLICATION->GetPopupLink(array('URL' => "/bitrix/admin/component_props.php?" . "path=" . urlencode(CUtil::addslashes($rel_path)) . "&template_id=" . urlencode(CUtil::addslashes(SITE_TEMPLATE_ID)) . "&lang=" . LANGUAGE_ID . "&src_path=" . urlencode(CUtil::addslashes($sSrcFile)) . "&src_line=" . $iSrcLine . "")), 'ICON' => "parameters", 'TITLE' => GetMessage("main_incl_file_comp_param"), 'DEFAULT' => true); } if ($sType == "MODULE") { $arIcons[] = array('URL' => 'javascript:if(confirm(\'' . GetMessage("MAIN_INC_BLOCK_MODULE") . '\'))window.location=\'' . $editor . '&path=' . urlencode(BX_PERSONAL_ROOT . '/templates/' . SITE_TEMPLATE_ID . '/' . $rel_path) . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . '&template=' . $path . '\';', 'ICON' => 'copy', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("main_incl_file_edit_copy")))); } elseif ($sType == "DEFAULT") { $arIcons[] = array('URL' => 'javascript:if(confirm(\'' . GetMessage("MAIN_INC_BLOCK_COMMON") . '\'))window.location=\'' . $editor . $path_url . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . $arFunctionParams["TEMPLATE"] . '\';', 'ICON' => 'edit-common', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_BLOCK_EDIT")))); $arIcons[] = array('URL' => $editor . '&path=' . urlencode(BX_PERSONAL_ROOT . '/templates/' . SITE_TEMPLATE_ID . '/' . $rel_path) . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . '&template=' . $path, 'ICON' => 'copy', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_BLOCK_COMMON_COPY")))); } else { $arPanelParams["TOOLTIP"] = array('TITLE' => GetMessage('main_incl_file'), 'TEXT' => $path); $arIcons[] = array('URL' => 'javascript:' . $APPLICATION->GetPopupLink(array('URL' => $editor . $path_url . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . $arFunctionParams["TEMPLATE"], "PARAMS" => array('width' => 770, 'height' => 470, 'resize' => $resize))), 'ICON' => 'bx-context-toolbar-edit-icon', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_ED"))), 'DEFAULT' => !$bDefaultExists); if ($arFunctionParams["WORKFLOW"]) { $arIcons[] = array('URL' => '/bitrix/admin/workflow_edit.php?' . $arFunctionParams["LANG"] . '&fname=' . urlencode($path) . $arFunctionParams["TEMPLATE"] . $arFunctionParams["BACK_URL"], 'ICON' => 'bx-context-toolbar-edit-icon', 'TITLE' => str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_ED_WF"))); } } echo $this->IncludeStringBefore(); } $res = null; if (is_file($_SERVER["DOCUMENT_ROOT"] . $path)) { if (is_array($arParams)) { extract($arParams, EXTR_SKIP); } $res = (include $_SERVER["DOCUMENT_ROOT"] . $path); } if ($_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y" && ($USER->CanDoOperation('edit_php') || $_SESSION["SHOW_SQL_STAT"] == "Y")) { echo $debug->Output($rel_path, $path); } elseif (is_object($debug)) { $debug->Stop($rel_path, $path); } if ($bDrawIcons) { $comp_id = $path; if ($sSrcFile) { $comp_id .= '|' . $sSrcFile; } if ($iSrcLine) { $comp_id .= '|' . $iSrcLine; } $arPanelParams['COMPONENT_ID'] = md5($comp_id); echo $this->IncludeStringAfter($arIcons, $arPanelParams); } return $res; }
function AddMessage2Log($sText, $sModule = "", $traceDepth = 6, $bShowArgs = false) { if (defined("LOG_FILENAME") && strlen(LOG_FILENAME) > 0) { if (!is_string($sText)) { $sText = var_export($sText, true); } if (strlen($sText) > 0) { ignore_user_abort(true); if ($fp = @fopen(LOG_FILENAME, "ab")) { if (flock($fp, LOCK_EX)) { @fwrite($fp, "Host: " . $_SERVER["HTTP_HOST"] . "\nDate: " . date("Y-m-d H:i:s") . "\nModule: " . $sModule . "\n" . $sText . "\n"); $arBacktrace = Bitrix\Main\Diag\Helper::getBackTrace($traceDepth, $bShowArgs ? null : DEBUG_BACKTRACE_IGNORE_ARGS); $strFunctionStack = ""; $strFilesStack = ""; $firstFrame = count($arBacktrace) == 1 ? 0 : 1; $iterationsCount = min(count($arBacktrace), $traceDepth); for ($i = $firstFrame; $i < $iterationsCount; $i++) { if (strlen($strFunctionStack) > 0) { $strFunctionStack .= " < "; } if (isset($arBacktrace[$i]["class"])) { $strFunctionStack .= $arBacktrace[$i]["class"] . "::"; } $strFunctionStack .= $arBacktrace[$i]["function"]; if (isset($arBacktrace[$i]["file"])) { $strFilesStack .= "\t" . $arBacktrace[$i]["file"] . ":" . $arBacktrace[$i]["line"] . "\n"; } if ($bShowArgs && isset($arBacktrace[$i]["args"])) { $strFilesStack .= "\t\t"; if (isset($arBacktrace[$i]["class"])) { $strFilesStack .= $arBacktrace[$i]["class"] . "::"; } $strFilesStack .= $arBacktrace[$i]["function"]; $strFilesStack .= "(\n"; foreach ($arBacktrace[$i]["args"] as $value) { $strFilesStack .= "\t\t\t" . $value . "\n"; } $strFilesStack .= "\t\t)\n"; } } if (strlen($strFunctionStack) > 0) { @fwrite($fp, " " . $strFunctionStack . "\n" . $strFilesStack); } @fwrite($fp, "----------\n"); @fflush($fp); @flock($fp, LOCK_UN); @fclose($fp); } } ignore_user_abort(false); } } }
?> </form> <form method="post" action="/bitrix/admin/site_checker.php?tabControl_active_tab=edit5#edit5"> <?php $strSupportErrorText = ""; $strSupportErrorText .= "File: " . __FILE__ . "\n"; if (strlen($error_position) > 0) { $strSupportErrorText .= "[" . $error_position . "]\n"; } if (strlen($strSql) > 0) { $strSupportErrorText .= "Query: " . $strSql . "\n"; } if (is_object($this) && strlen($this->db_Error) > 0) { $strSupportErrorText .= "[" . $this->db_Error . "]\n"; } $d = Bitrix\Main\Diag\Helper::getBackTrace(); $trace = array(); // due to memory limitations foreach ($d as $tmp) { $trace[] = array('file' => $tmp['file'], 'line' => $tmp['line'], 'class' => $tmp['class'], 'function' => $tmp['function'], 'args' => $tmp['args']); } $strSupportErrorText .= "debug_backtrace:\n" . print_r($trace, True) . "\n"; ?> <input type="hidden" name="last_error_query" value="<?php echo htmlspecialcharsbx($strSupportErrorText); ?> "> <?php echo bitrix_sessid_post(); ?> <input type="submit" value="Send error report to support">