Иногда нужно обойти все файлы в папке и поменять их кодировку с одной на другую. Например вы разрабатываете какой-нибудь модуль для 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 =массив с расширениями для обхода