Files
crm.clientright.ru/crm_extensions/file_storage/migrate_single_file.php

147 lines
5.5 KiB
PHP
Raw Normal View History

<?php
/**
* Миграция одного конкретного файла
*/
$notesid = 393072;
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");
// Получаем информацию о файле
$result = $mysqli->query("SELECT notesid, filename, filesize, filetype, filelocationtype FROM vtiger_notes WHERE notesid = $notesid");
if (!$result || $result->num_rows == 0) {
die("File not found in database\n");
}
$row = $result->fetch_assoc();
$filename = $row['filename'];
echo "Миграция файла ID: $notesid, File: $filename\n";
echo "==========================================\n";
// Поиск локального файла
$storageDir = '/var/www/fastuser/data/www/crm.clientright.ru/storage/';
$localFilePath = null;
// Список возможных путей для поиска
$searchPaths = [
$storageDir . $filename,
$storageDir . $notesid . '_' . $filename,
];
// Добавляем поиск по близким ID (±5 от текущего)
for ($idOffset = -5; $idOffset <= 5; $idOffset++) {
$searchId = $notesid + $idOffset;
$searchPaths[] = $storageDir . $searchId . '_' . $filename;
}
// Добавляем поиск по годам (2023, 2024, 2025)
for ($year = 2023; $year <= 2025; $year++) {
$searchPaths[] = $storageDir . $year . '/' . $filename;
$searchPaths[] = $storageDir . $year . '/' . $notesid . '_' . $filename;
// Поиск по месяцам
$months = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
foreach ($months as $month) {
$searchPaths[] = $storageDir . $year . '/' . $month . '/' . $filename;
$searchPaths[] = $storageDir . $year . '/' . $month . '/' . $notesid . '_' . $filename;
// Поиск по неделям
for ($week = 1; $week <= 5; $week++) {
$searchPaths[] = $storageDir . $year . '/' . $month . '/week' . $week . '/' . $filename;
$searchPaths[] = $storageDir . $year . '/' . $month . '/week' . $week . '/' . $notesid . '_' . $filename;
// Поиск по близким ID в структурированном хранилище
for ($idOffset = -5; $idOffset <= 5; $idOffset++) {
$searchId = $notesid + $idOffset;
$searchPaths[] = $storageDir . $year . '/' . $month . '/week' . $week . '/' . $searchId . '_' . $filename;
}
}
}
}
// Ищем первый существующий файл
foreach ($searchPaths as $path) {
if (file_exists($path) && is_readable($path)) {
$localFilePath = $path;
break;
}
}
if ($localFilePath === null) {
die("❌ Physical file not found anywhere.\n");
}
echo "✅ Найден файл: $localFilePath\n";
echo " Размер: " . filesize($localFilePath) . " bytes\n";
// Подключение S3 сервиса
require_once '/var/www/fastuser/data/www/crm.clientright.ru/include/Storage/S3StorageService.php';
$s3Service = new S3StorageService();
$s3Bucket = 'f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c';
// Формирование S3 ключа
$s3_key = 'crm2/CRM_Active_Files/Documents/' . $notesid . '/' . $filename;
echo "📤 Загружаем в S3...\n";
echo " S3 Key: $s3_key\n";
try {
// Загрузка в S3
$s3_result = $s3Service->put($localFilePath, $notesid, $filename);
if ($s3_result && isset($s3_result['url'])) {
$s3_etag = isset($s3_result['etag']) ? trim($s3_result['etag'], '"') : '';
$s3_url = $s3_result['url'];
$s3_key = $s3_result['key'];
echo "✅ S3 загрузка успешна!\n";
echo " URL: $s3_url\n";
echo " ETag: $s3_etag\n";
// Обновление базы данных
$update_query = "UPDATE vtiger_notes SET
s3_key = ?,
s3_bucket = ?,
s3_etag = ?,
filename = ?,
filelocationtype = 'E'
WHERE notesid = ?";
$update_stmt = $mysqli->prepare($update_query);
if (!$update_stmt) {
die("❌ Update prepare failed: " . $mysqli->error . "\n");
}
$update_stmt->bind_param('ssssi', $s3_key, $s3Bucket, $s3_etag, $s3_url, $notesid);
if ($update_stmt->execute()) {
echo "✅ База данных обновлена!\n";
// Удаление локального файла
if (unlink($localFilePath)) {
echo "🗑️ Локальный файл удален: $localFilePath\n";
} else {
echo "⚠️ Не удалось удалить локальный файл: $localFilePath\n";
}
} else {
echo "❌ Ошибка обновления БД: " . $update_stmt->error . "\n";
}
$update_stmt->close();
} else {
echo "❌ S3 загрузка не удалась. Результат: " . json_encode($s3_result) . "\n";
}
} catch (Exception $e) {
echo "❌ Ошибка S3: " . $e->getMessage() . "\n";
}
$mysqli->close();
echo "\n🎉 Миграция завершена!\n";
?>