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

147 lines
5.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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";
?>