96 lines
3.6 KiB
PHP
96 lines
3.6 KiB
PHP
<?php
|
||
/**
|
||
* Get Problematic Files Report
|
||
*
|
||
* Этот скрипт выводит список файлов, помеченных как проблемные
|
||
*/
|
||
|
||
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
|
||
|
||
// Подключение к базе данных
|
||
$mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']);
|
||
if ($mysqli->connect_error) {
|
||
die("Connection failed: " . $mysqli->connect_error);
|
||
}
|
||
$mysqli->set_charset("utf8");
|
||
|
||
echo "=== ПРОБЛЕМНЫЕ ФАЙЛЫ ===\n";
|
||
echo "Дата отчета: " . date('Y-m-d H:i:s') . "\n\n";
|
||
|
||
// Получаем все файлы с префиксом [PROBLEM_]
|
||
$query = "SELECT notesid, filename, filesize, filetype, filelocationtype
|
||
FROM vtiger_notes
|
||
WHERE filename LIKE '[PROBLEM_%'
|
||
ORDER BY notesid ASC";
|
||
|
||
$result = $mysqli->query($query);
|
||
if (!$result) {
|
||
die("Query failed: " . $mysqli->error);
|
||
}
|
||
|
||
$problematicFiles = [];
|
||
while ($row = $result->fetch_assoc()) {
|
||
$problematicFiles[] = $row;
|
||
}
|
||
|
||
echo "Всего проблемных файлов: " . count($problematicFiles) . "\n\n";
|
||
|
||
if (empty($problematicFiles)) {
|
||
echo "Проблемных файлов не найдено.\n";
|
||
$mysqli->close();
|
||
exit(0);
|
||
}
|
||
|
||
// Группируем по дате создания проблемы
|
||
$groupedByDate = [];
|
||
foreach ($problematicFiles as $file) {
|
||
if (preg_match('/\[PROBLEM_(\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2})\]/', $file['filename'], $matches)) {
|
||
$problemDate = $matches[1];
|
||
$groupedByDate[$problemDate][] = $file;
|
||
}
|
||
}
|
||
|
||
echo "ГРУППИРОВКА ПО ДАТЕ ПРОБЛЕМЫ:\n";
|
||
foreach ($groupedByDate as $date => $files) {
|
||
echo " $date: " . count($files) . " файлов\n";
|
||
}
|
||
echo "\n";
|
||
|
||
echo "ДЕТАЛЬНЫЙ СПИСОК:\n";
|
||
echo sprintf("%-8s %-50s %-10s %-25s %s\n",
|
||
"ID", "Original Filename", "Size", "Type", "Problem Date");
|
||
echo str_repeat("-", 120) . "\n";
|
||
|
||
foreach ($problematicFiles as $file) {
|
||
// Извлекаем оригинальное имя файла
|
||
$originalFilename = preg_replace('/\[PROBLEM_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\] /', '', $file['filename']);
|
||
|
||
// Извлекаем дату проблемы
|
||
$problemDate = '';
|
||
if (preg_match('/\[PROBLEM_(\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2})\]/', $file['filename'], $matches)) {
|
||
$problemDate = $matches[1];
|
||
}
|
||
|
||
echo sprintf("%-8s %-50s %-10s %-25s %s\n",
|
||
$file['notesid'],
|
||
substr($originalFilename, 0, 47) . (strlen($originalFilename) > 47 ? '...' : ''),
|
||
$file['filesize'],
|
||
substr($file['filetype'], 0, 22) . (strlen($file['filetype']) > 22 ? '...' : ''),
|
||
$problemDate
|
||
);
|
||
}
|
||
|
||
echo "\n";
|
||
|
||
echo "РЕКОМЕНДАЦИИ ПО ОБРАБОТКЕ:\n";
|
||
echo "1. Проверить физическое существование файлов на диске\n";
|
||
echo "2. Найти файлы с похожими именами или ID\n";
|
||
echo "3. Принять решение: удалить, архивировать или восстановить\n";
|
||
echo "4. Использовать SQL для массовых операций:\n";
|
||
echo " - Удаление: DELETE FROM vtiger_notes WHERE filename LIKE '[PROBLEM_%'\n";
|
||
echo " - Архивирование: UPDATE vtiger_notes SET filelocationtype = 'A' WHERE filename LIKE '[PROBLEM_%'\n";
|
||
echo " - Восстановление: UPDATE vtiger_notes SET filename = REPLACE(filename, '[PROBLEM_YYYY-MM-DD_HH-MM-SS] ', '') WHERE filename LIKE '[PROBLEM_%'\n";
|
||
|
||
$mysqli->close();
|
||
?>
|