2015-07-29 2 views
-1

Мне нужно преобразовать CSV-файл в UTF-8 и переименовать его с помощью PHP-скрипта.Как преобразовать CSV-файл с помощью PHP-скрипта

Следующий код работал на моем компьютере, но теперь мне нужно сделать это на сервере в качестве задачи CRON

iconv -f UTF-16LE -t UTF-8 OLD-FILE.csv > NEW-FILE.csv

Кто-нибудь знает эквивалент в PHP. Большое спасибо.

+0

is iconv недоступно на сервере? –

+0

К сожалению, нет, но php iconv есть. Но я не могу понять окончательный код. –

+0

http://www.craiglotter.co.za/2010/03/07/how-to-convert-an-utf-16-file-to-an-utf-8-file-using-php/ и http: //us.php.net/manual/en/function.utf8-decode.php#49185 – ssnobody

ответ

3

Простой метод должен был бы загрузить файл CSV в строку, используя следующую команду:

Затем вы можете UTF-8 закодировать строку, используя следующую команду:

Наконец напишите строку в файл, используя file_put_contents.

Закончено код может выглядеть следующим образом:

$file_data = file_get_contents('/my/path/to/file.csv'); 
$utf8_file_data = utf8_encode($file_data); 
$new_file_name = '/my/path/to/new_file.csv'; 
file_put_contents($new_file_name , $utf8_file_data); 

Убедитесь, что веб-сервер имеет правильные разрешения на чтение и запись в соответствующих местах.

Вот ссылка на file_put_contents():

+0

Недостаточно репутации для публикации всех ссылок здесь ссылка на file_put_contents http://php.net/manual/en/function.file-put-contents.php –

+0

OK Я получаю это сообщение: Fatal error: Разрешенный размер памяти из 268435456 байт исчерпан (пытался выделить 244645189 байт) в Convert_utf16_to_utf8.php в строке 4 –

+0

вы можете увеличить предел памяти с помощью этой команды ini_set ('memory_limit', '300M'); сделало бы трюк, теперь я беспокоюсь, что это большие файлы, и это может быть не лучший метод. –

0

если Iconv доступен вы можете использовать PHP эквивалент: http://php.net/manual/en/function.iconv.php к сведению, что это принимает строку, вам нужно будет прочитать в файле http://php.net/manual/en/function.fread.php, а затем записать его http://php.net/manual/en/function.file-put-contents.php, но этот подход может быть медленнее, и для больших файлов, это потребуется загрузить файл в память.

+0

Джозеф, каким будет последний код? –

+0

Мой файл 60Mo. –

0

Так вот решение, которое я нашел благодаря нашей мозговой атаки:

<?php 
$file_data = file_get_contents('/home/MYFILE.csv'); 
//$utf8_file_data = utf8_encode($file_data); 

$utf8_file_data = mb_convert_encoding($file_data, "UTF-8", "UTF-16LE"); 
//$utf8_file_data = iconv("UTF-16LE","UTF-8",$file_data); 

$new_file_name = '/home/MYFILE_NEW.csv'; 
file_put_contents($new_file_name , $utf8_file_data); 
?> 

Единственный пб, что выход размер в два раза больше, чем вход. Если я использую ICONV на своем ПК, то это ПОЛНОСТЬЮ размер ...

Если кто-нибудь знает, я хотел бы услышать, почему.

Смежные вопросы