From 7c3e7f6b13728e8c8f9ae3980df79aaa71d7abdb Mon Sep 17 00:00:00 2001 From: Repellent Date: Mon, 13 Apr 2026 21:09:16 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20(?= =?UTF-8?q?=D0=96=D1=83=D1=80=D0=BD=D0=B0=D0=BB=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=BD=D1=8B=D1=85=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B9,=20=D0=96=D1=83=D1=80=D0=BD=D0=B0=D0=BB=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20404,=20=D0=96=D1=83=D1=80?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20MySQL=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA):=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B8,=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20CSV=20?= =?UTF-8?q?(=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20BOM)=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20Excel,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20URL=20=D0=B2=20?= =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B5=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=81=D1=81=D1=8B=D0=BB=D0=BE=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/class.logs.php | 125 ++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 73 deletions(-) diff --git a/class/class.logs.php b/class/class.logs.php index 68bdab0..bb0cdf9 100644 --- a/class/class.logs.php +++ b/class/class.logs.php @@ -9,7 +9,7 @@ * @package AVE.cms * @version 4.x * @filesource - * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * @copyright © 2007-2026 AVE.cms, https://ave4cms.ru * */ @@ -160,7 +160,6 @@ ]; } - // Передаем данные в шаблон для вывода и отображаем страницу $AVE_Template->assign('logs', $_lines); $AVE_Template->assign('content', $AVE_Template->fetch('logs/404.tpl')); } @@ -201,150 +200,130 @@ $AVE_Template->assign('content', $AVE_Template->fetch('logs/sql.tpl')); } - /** - * Метод, предназначенный для удаление записей Журнала событий - * - */ function logDelete() { global $AVE_Template; - $logfile = BASE_DIR . $this->_logdir; - - if(file_exists($logfile)) - unlink($logfile); - - // Сохраняем системное сообщение в журнал + if(file_exists($logfile)) unlink($logfile); reportLog($AVE_Template->get_config_vars('LOGS_CLEAN')); - header('Location:index.php?do=logs&cp=' . SESSION); exit; } - /** - * Метод, предназначенный для удаление записей Журнала событий 404 - * - */ function DeleteSql() { global $AVE_Template; - $logfile = BASE_DIR . $this->_sqldir; - - if(file_exists($logfile)) - unlink($logfile); - - // Сохраняем системное сообщение в журнал + if(file_exists($logfile)) unlink($logfile); reportLog($AVE_Template->get_config_vars('LOGS_SQL_CLEAN')); - header('Location:index.php?do=logs&action=logsql&cp=' . SESSION); exit; } - /** - * Метод, предназначенный для удаление записей Журнала событий 404 - * - */ function Delete404() { global $AVE_Template; - $logfile = BASE_DIR . $this->_404dir; - - if(file_exists($logfile)) - unlink($logfile); - - // Сохраняем системное сообщение в журнал + if(file_exists($logfile)) unlink($logfile); reportLog($AVE_Template->get_config_vars('LOGS_404_CLEAN')); - header('Location:index.php?do=logs&action=log404&cp=' . SESSION); exit; } /** - * Метод, предназначенный для экспорта системных сообщений - * + * Экспорт системных сообщений */ function logExport() { global $AVE_Template; - $file_name = BASE_DIR . $this->_logdir; + if (!file_exists($file_name)) exit; + $dateName = 'system_log_' . date('dmyhis', time()) . '.csv'; - // Определяем заголовки документа - header('Content-Encoding: windows-1251'); - header('Content-type: text/csv; charset=windows-1251'); - header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $dateName . '"'); - header('Content-Length: ' . filesize($file_name)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); - // Выводим данные - readfile($file_name); + echo "\xEF\xBB\xBF"; - // Сохраняем системное сообщение в журнал + $fp = fopen($file_name, 'rb'); + $out = fopen('php://output', 'w'); + + while (($data = fgetcsv($fp, 0, ',', '"', '\\')) !== FALSE) { + if (isset($data[2])) $data[2] = urldecode($data[2]); + fputcsv($out, $data, ',', '"', '\\'); + } + + fclose($fp); + fclose($out); reportLog($AVE_Template->get_config_vars('LOGS_EXPORT')); - exit; } /** - * Метод, предназначенный для экспорта сообщений 404 - * + * Экспорт сообщений 404 */ function Export404() { global $AVE_Template; - $file_name = BASE_DIR . $this->_404dir; - $dateName = 'system_log_' . date('dmyhis', time()) . '.csv'; + if (!file_exists($file_name)) exit; - // Определяем заголовки документа - header('Content-Encoding: windows-1251'); - header('Content-type: text/csv; charset=windows-1251'); - header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + $dateName = 'system_404_' . date('dmyhis', time()) . '.csv'; + + header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $dateName . '"'); - header('Content-Length: ' . filesize($file_name)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); - // Выводим данные - readfile($file_name); + echo "\xEF\xBB\xBF"; - // Сохраняем системное сообщение в журнал + $fp = fopen($file_name, 'rb'); + $out = fopen('php://output', 'w'); + + while (($data = fgetcsv($fp, 0, ',', '"', '\\')) !== FALSE) { + if (isset($data[2])) $data[2] = urldecode($data[2]); + if (isset($data[4])) $data[4] = urldecode($data[4]); + if (isset($data[5])) $data[5] = urldecode($data[5]); + fputcsv($out, $data, ',', '"', '\\'); + } + + fclose($fp); + fclose($out); reportLog($AVE_Template->get_config_vars('LOGS_EXPORT')); - exit; } /** - * Метод, предназначенный для экспорта сообщений MySql - * + * Экспорт сообщений MySql */ function ExportSql() { global $AVE_Template; - $file_name = BASE_DIR . $this->_sqldir; - $dateName = 'system_log_' . date('dmyhis', time()) . '.csv'; + if (!file_exists($file_name)) exit; - // Определяем заголовки документа - header('Content-Encoding: windows-1251'); - header('Content-type: text/csv; charset=windows-1251'); - header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + $dateName = 'system_sql_' . date('dmyhis', time()) . '.csv'; + + header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $dateName . '"'); - header('Content-Length: ' . filesize($file_name)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); - // Выводим данные - readfile($file_name); + echo "\xEF\xBB\xBF"; - // Сохраняем системное сообщение в журнал + $fp = fopen($file_name, 'rb'); + $out = fopen('php://output', 'w'); + + while (($data = fgetcsv($fp, 0, ',', '"', '\\')) !== FALSE) { + fputcsv($out, $data, ',', '"', '\\'); + } + + fclose($fp); + fclose($out); reportLog($AVE_Template->get_config_vars('LOGS_EXPORT')); - exit; } }