chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
This commit is contained in:
@@ -2834,12 +2834,15 @@ function CopyEntityFiles($crmid, $folder) {
|
||||
// Поддерживает как локальные файлы, так и файлы в S3
|
||||
global $adb;
|
||||
|
||||
// Упрощенный запрос - все документы
|
||||
// Расширенный запрос - получаем все необходимые поля для работы с S3
|
||||
$query = 'select
|
||||
r.crmid,
|
||||
r.notesid,
|
||||
n.title,
|
||||
n.filename
|
||||
n.filename,
|
||||
n.filelocationtype,
|
||||
n.s3_bucket,
|
||||
n.s3_key
|
||||
from vtiger_senotesrel r
|
||||
left join vtiger_notes n on n.notesid = r.notesid
|
||||
left join vtiger_crmentity e on e.crmid = r.notesid
|
||||
@@ -2853,9 +2856,13 @@ function CopyEntityFiles($crmid, $folder) {
|
||||
if ($num_rows > 0) {
|
||||
|
||||
for ($i=0; $i<$num_rows; $i++) {
|
||||
$notesid = $adb->query_result($result, $i, 'notesid');
|
||||
$title = $adb->query_result($result, $i, 'title');
|
||||
$filename = $adb->query_result($result, $i, 'filename');
|
||||
try {
|
||||
$notesid = $adb->query_result($result, $i, 'notesid');
|
||||
$title = $adb->query_result($result, $i, 'title');
|
||||
$filename = $adb->query_result($result, $i, 'filename');
|
||||
$filelocationtype = $adb->query_result($result, $i, 'filelocationtype');
|
||||
$s3_bucket = $adb->query_result($result, $i, 's3_bucket');
|
||||
$s3_key = $adb->query_result($result, $i, 's3_key');
|
||||
|
||||
// Формируем короткое имя файла для сохранения
|
||||
// Используем title из базы, но переводим в латиницу и сокращаем
|
||||
@@ -2898,51 +2905,84 @@ function CopyEntityFiles($crmid, $folder) {
|
||||
|
||||
$destination = $folder.'/'.$save_filename;
|
||||
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' CopyEntityFiles: обрабатываем файл '.($i+1).'/'.$num_rows.' - '.$filename.PHP_EOL, FILE_APPEND);
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' CopyEntityFiles: Notes ID='.$notesid.', Title='.$title.PHP_EOL, FILE_APPEND);
|
||||
|
||||
// Пытаемся скачать файл напрямую через HTTP
|
||||
$file_content = '';
|
||||
$success = false;
|
||||
|
||||
// Проверяем что это URL
|
||||
if (filter_var($filename, FILTER_VALIDATE_URL)) {
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Пытаемся скачать файл по URL: '.$filename.PHP_EOL, FILE_APPEND);
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' CopyEntityFiles: обрабатываем файл '.($i+1).'/'.$num_rows.' - '.$filename.PHP_EOL, FILE_APPEND);
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' CopyEntityFiles: Notes ID='.$notesid.', Title='.$title.', filelocationtype='.$filelocationtype.', s3_bucket='.$s3_bucket.', s3_key='.$s3_key.PHP_EOL, FILE_APPEND);
|
||||
|
||||
// Скачиваем файл через cURL
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $filename);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
|
||||
// Пытаемся скачать файл напрямую через HTTP
|
||||
$file_content = '';
|
||||
$success = false;
|
||||
$download_url = '';
|
||||
|
||||
$file_content = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($file_content !== false && $http_code == 200) {
|
||||
$success = true;
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл скачан успешно через HTTP, размер: '.strlen($file_content).' байт'.PHP_EOL, FILE_APPEND);
|
||||
} else {
|
||||
$file_content = "Ошибка скачивания файла:\n";
|
||||
$file_content .= "HTTP Code: $http_code\n";
|
||||
$file_content .= "Error: $error\n";
|
||||
$file_content .= "URL: $filename\n";
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Ошибка скачивания HTTP: '.$error.PHP_EOL, FILE_APPEND);
|
||||
// Приоритет 1: Если есть s3_bucket и s3_key, формируем URL для S3
|
||||
if (!empty($s3_bucket) && !empty($s3_key)) {
|
||||
$download_url = 'https://s3.twcstorage.ru/'.$s3_bucket.'/'.$s3_key;
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл в S3, формируем URL: '.$download_url.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
} else {
|
||||
$file_content = "Информация о файле:\n";
|
||||
$file_content .= "Title: $title\n";
|
||||
$file_content .= "Notes ID: $notesid\n";
|
||||
$file_content .= "Filename: $filename\n";
|
||||
$file_content .= "Примечание: Не является URL\n";
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл не является URL: '.$filename.PHP_EOL, FILE_APPEND);
|
||||
// Приоритет 2: Если filename уже содержит URL (начинается с http:// или https://)
|
||||
elseif (!empty($filename) && (strpos($filename, 'http://') === 0 || strpos($filename, 'https://') === 0)) {
|
||||
$download_url = $filename;
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Используем URL из filename: '.$download_url.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
// Приоритет 3: Проверяем через filter_var (для совместимости)
|
||||
elseif (!empty($filename) && filter_var($filename, FILTER_VALIDATE_URL)) {
|
||||
$download_url = $filename;
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' URL распознан через filter_var: '.$download_url.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
|
||||
// Если есть URL для скачивания, пытаемся скачать
|
||||
if (!empty($download_url)) {
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Пытаемся скачать файл по URL: '.$download_url.PHP_EOL, FILE_APPEND);
|
||||
|
||||
// Скачиваем файл через cURL с улучшенной обработкой ошибок
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $download_url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // Увеличиваем таймаут до 60 секунд
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Отключаем проверку SSL для S3
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
|
||||
$file_content = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($file_content !== false && $http_code == 200 && strlen($file_content) > 100) {
|
||||
// Проверяем, что это не HTML страница с ошибкой (минимальный размер 100 байт)
|
||||
$success = true;
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл из S3 скачан успешно, размер: '.strlen($file_content).' байт'.PHP_EOL, FILE_APPEND);
|
||||
} else {
|
||||
// Логируем ошибку, но не сохраняем текстовое сообщение
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' ОШИБКА скачивания: HTTP Code='.$http_code.', Error='.$error.', Content-Type='.$content_type.', Size='.strlen($file_content).' байт'.PHP_EOL, FILE_APPEND);
|
||||
$file_content = false; // Помечаем как неудачу
|
||||
$success = false;
|
||||
}
|
||||
} else {
|
||||
// Нет URL для скачивания - это локальный файл или ошибка
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' ПРЕДУПРЕЖДЕНИЕ: Не удалось определить URL для файла. Filename='.$filename.', filelocationtype='.$filelocationtype.PHP_EOL, FILE_APPEND);
|
||||
$file_content = false;
|
||||
$success = false;
|
||||
}
|
||||
|
||||
// Сохраняем файл только если скачивание успешно
|
||||
if ($success && $file_content !== false) {
|
||||
$write_result = file_put_contents($destination, $file_content);
|
||||
if ($write_result !== false) {
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл сохранен: '.$destination.' ('.strlen($file_content).' байт)'.PHP_EOL, FILE_APPEND);
|
||||
} else {
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' ОШИБКА: Не удалось сохранить файл в '.$destination.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
} else {
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' ПРОПУЩЕН: Файл не сохранен из-за ошибки скачивания (Notes ID='.$notesid.')'.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// Обработка исключений - логируем и продолжаем работу
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' ИСКЛЮЧЕНИЕ при обработке файла Notes ID='.$notesid.': '.$e->getMessage().PHP_EOL, FILE_APPEND);
|
||||
continue; // Пропускаем этот файл и продолжаем со следующим
|
||||
}
|
||||
|
||||
file_put_contents($destination, $file_content);
|
||||
file_put_contents('logs/CopyToS3.log', date('Y-m-d H:i:s').' Файл сохранен: '.$destination.' ('.strlen($file_content).' байт)'.PHP_EOL, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user