Скрыть объявление
Гость Присоединяйся к складчине. Автокаталог для грузовых авто

Рекурсивное Перекодирование Файлов В Linux При Помощи Enconv И Php

Тема в разделе "Хостинг", создана пользователем northmule, 28 июл 2017.

  1. northmule

    northmule Новичок Зарегистрирован

    Регистрация
    20 июл 2017
    Сообщения
    5
    Симпатии
    1
    Баллы
    1
    Для тех кто рабоатет не только через панель хостинга, может быть полезно менять кодировку файла при помощи языка 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');
     
  2. northmule

    northmule Новичок Зарегистрирован

    Регистрация
    20 июл 2017
    Сообщения
    5
    Симпатии
    1
    Баллы
    1
    Еще вариант, если в системе нет консольной enconv программы и её нет возможности установить, тогда следующий код так же будет перекодировать данные
    <?php

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

    */
    function decodingFile($path, $mask, $decoding, $encoding = 'Windows-1251') {
    $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";
    //iconv -f cp1251 -t utf8 исходный.txt -o конечный.txt

    if ($encoding == FALSE) {
    system('enconv -x' . $decoding . ' ' . $path . $value);
    } else {
    $curentCharset = '';
    $curentCharset = shell_exec('file -bi ' . $path . $value);
    if (stripos($curentCharset, $decoding) === FALSE) { //Если файл имеет отличную от $decoding кодировку
    system('iconv -f' . $encoding . ' -t ' . $decoding . ' ' . $path . $value . ' -o ' . $path . $value);
    }
    }

    //
    }
    }
    }
    }
    }

    //Использование
    //В эом случае можно и нужно задать параметр функции $encoding в FALSE
    $folder = '/home/ermak/NetBeansProjects/krayavto.ru/bitrix/templates/zixnru_theme2/';
    $mask = array('.php', '.txt', '.js', '.css');
    decodingFile($folder, $mask, 'UTF-8');
     

Поделиться этой страницей

Share
Загрузка...
Плагины для XenForo/