Рекурсивное перекодирование файлов в Linux при помощи enconv и php

Иногда нужно обойти все файлы в папке и поменять их кодировку с одной на другую. Например вы разрабатываете какой-нибудь модуль для CMS и решили убедиться что он корректно работает на сайтах с различной кодировкой.
Естественно вам потребуется поменять кодировку файла, если вы «Линуксойд» — то для вас не составит труда написать bash скрипт, но если нет и вы знаете php можно тоже самое в Linux сделать и при помощи php функции.
Код функции ниже.

/**
 * Функция не проверяет наличие в системе консольной программы enconv
 * Рекурсивное перекодирование файлов из одной кодировки 
 * в другую при помощи Linux программы enconv
 * @param string $path абсолютный путь к папке с файлами с слешем на конце
 * @param array $mask массив расширений которые нужно обработать вида array('.php', '.txt')
 * @param string $decoding Кодировка файлов которую нужно получить

 */
function decodingFile($path, $mask, $decoding) {
    $struct = scandir($path);
    foreach ($struct as $key => $value) {
        if ($value == '.' OR $value == '..') {
            continue;
        }
        if (is_dir($path . $value . '/')) {
            decodingFile($path . $value . '/', $mask, $decoding);
        } elseif (is_file($path . $value)) {

            foreach ($mask as $fileTrue) {
                if (stripos($value, $fileTrue) === FALSE) {
                    continue;
                }

                if (is_file($path . $value)) {
                    echo $path . $value . "\n";
                    system('enconv -x' . $decoding . ' ' . $path . $value);
                }
            }
        }
    }
}

//Использование
$folder = '/home/djo/NetBeansProjects/lab1.b2/bitrix/modules/zixnru.inomarka/';
$mask = array('.php', '.txt');
decodingFile($folder, $mask, 'UTF-8');

В примере:

$folder = полный путь до каталога с файлами

$mask =массив с расширениями для обхода

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *