С О З Д А Н И Е

Сайтов в Пензе

PHP скрипт для решения проблем с кодировкой бекапа VestaCP

Столкнулся с проблемой на одном из своих серверов. На этот раз сайт после неудачного созданного бекапа на русских словах поменял кодировку с UTF-8 на WIN-1251. Бывает и такое, на данном серваке установлена VestaCp, а она любит приподносить сюрпризы. Самое обидное - в наличии 10 тысяч файлов и папок и не очень то и хотелось вручную убивать неделю жизни на восстановление нормальных имён файлов. Я очень полюбил панельку управления от VestaCP, но я устал каждый 3 месяца делать переустановку операционной системы и начисто заново устанавливать весту.

Столкнулся с проблемой на одном из своих серверов. На этот раз сайт после неудачного созданного бекапа на русских словах поменял кодировку с UTF-8 на WIN-1251. Бывает и такое, на данном серваке установлена VestaCp, а она любит преподносить сюрпризы. Самое обидное - в наличии 10 тысяч файлов и папок и не очень то и хотелось вручную убивать неделю жизни на восстановление нормальных имён файлов. Я очень полюбил панельку управления от VestaCP, но я устал каждый 3 месяца делать переустановку операционной системы и начисто заново устанавливать весту.

Имеем файлы с кракозябрами и их надо массово как-то пофиксить. Содержимое файлов трогать не будет, так как с ними всё в порядке (у меня это фотографии товаров), а вот имя файлов нужно будет заменить и желательно очень быстро. Напишем скрипт. Так как у меня довольно много папок и в каждой папке по 20 фотографий я буду делать всё аккуратно без рекурсии, по каждой папке в отдельности.

Название папки (у меня это ID товара) буду передавать в GET параметре прямо в браузере:

$n = $_GET["n"];

Далее укажу местоположение всех папок в директории на сервере с учётом вышеупомянутого параметра GET:

$papka = "upload/project/$n/";

Открываем папку и назначаем ей переменную:

$dir = opendir($papka);

Пробегаемся циклом и получаем список всех файлов:

while (false !== ($file = readdir($dir))) { ... }

Нужно будет отсечь из списка ненужные пункты, а именно "." и ".." (выход на папку выше или выйти в корень):

if ($file != "." && $file != "..") { ... }

Сама конвертация кодировок помещается в одну небольшую строку, в которой нужно указать местоположение файла со старым названием и указать местоположение файла, но уже с новым названием. Очевидно, что местоположение должно быть одинаковым, разница должна быть в имени файла.

$text = mb_convert_encoding($file, 'windows-1251', 'UTF-8');

Потом создаём полный путь к файлу путём объединения переменных:

$path = $papka.$file;

остаётся только выполнить две проверки, одна из которых будет проверка существования файла, а вторая проверка успешного завершения переименования файла:

if (file_exists($path)) {
    if (rename($path, $papka . $text)) {
        echo "Файл $text переименован.";
    } else {
        echo "Ошибка: Файл $text не был переименован.";
    }
} else {
    echo "Ошибка: Файл $text не существует.";
}

По сути всё, пришлось помучаться сегодня и сначала искать готовые решения, которые не помогли. Учитесь программировать и находить решения проблем с помощью кода! А готовый код можно будет посмотреть ниже:

<?php
$n = $_GET["n"];
$papka = "upload/project/$n/";
$dir = opendir($papka);
while (false !== ($file = readdir($dir))) {
    if ($file != "." && $file != "..") {
        $text = mb_convert_encoding($file, 'windows-1251', 'UTF-8');
        $path = $papka . $file;
        if (file_exists($path)) {
            if (rename($path, $papka . $text)) {
                echo "Файл $text переименован. <br>";
            } else {
                echo "Ошибка: Файл $text не был переименован. <br>";
            }
        } else {
            echo "Ошибка: Файл $text не существует. <br>";
        }
    }
}
?>

Text.ru - 100.00%


Другие уроки

Информация

  • Дата : 12.06.2022 19:38
  • Категория : Программирование
  • Просмотров : 713
3