147 lines
5.5 KiB
PHP
147 lines
5.5 KiB
PHP
<?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";
|
||
?>
|