/** * Метод сохраняет ошибку выполнения в файл * * @param Exception $exception */ public static function dumpError(Exception $exception, $additionalInfo = '') { if (ConfigIni::exceptionsMaxDumpCount() <= 0) { return; //--- } $additionalInfo = trim("{$additionalInfo}"); //Поставим защиту от двойного дампинга ошибки $SafePropName = 'ps_ex_dumped'; if (property_exists($exception, $SafePropName)) { return; //--- } $exception->{$SafePropName} = true; try { $INFO[] = 'SERVER: ' . (isset($_SERVER) ? print_r($_SERVER, true) : ''); $INFO[] = 'REQUEST: ' . (isset($_REQUEST) ? print_r($_REQUEST, true) : ''); $INFO[] = 'SESSION: ' . (isset($_SESSION) ? print_r($_SESSION, true) : ''); $INFO[] = 'FILES: ' . (isset($_FILES) ? print_r($_FILES, true) : ''); if ($additionalInfo) { $INFO[] = "ADDITIONAL:\n{$additionalInfo}\n"; } $INFO[] = 'STACK:'; $INFO[] = ExceptionHelper::formatStackFile($exception); $original = ExceptionHelper::extractOriginal($exception); $fname = get_file_name($original->getFile()); $fline = $original->getLine(); $DM = DirManager::autogen('exceptions'); if ($DM->getDirContentCnt() >= ConfigIni::exceptionsMaxDumpCount()) { $DM->clearDir(); } $DM->getDirItem(null, PsUtil::fileUniqueTime() . " [{$fname} {$fline}]", 'err')->putToFile(implode("\n", $INFO)); } catch (Exception $ex) { //Если в методе дампа эксепшена ошибка - прекращаем выполнение. die("Exception [{$exception->getMessage()}] dump error: [{$ex->getMessage()}]"); } }