Как конвертировать файл CSV с помощью скрипта PHP

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

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

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

Любой знает эквивалент в PHP. Большое спасибо.

-1

Решение

Простой способ — загрузить 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():

3

Другие решения

если 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

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

<?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 на моем ПК, то это ПОЛОВИННЫЙ размер …

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

0
По вопросам рекламы [email protected]