TheRabbit
Guest
XML файлы большого объема в win-1251
Ситуация такая - специальная прога под виндами создает XML файл (в кодировке win1251) и отсылает его на FTP хостинга. Проблема в том, что файл XML в win1251, а скрипту нужен UTF-8, т.е. файл надо переконвертировать. На хостинге стоит скрипр PHP4 и его задача прочитать этот XML файл и выдернуть все данные из него в базу mysql. Все это реализованно и работает, но проблема с файлами большого объема - вылетают ошибки.
Вот самое узкое место:
Размер XML файла - 32 мега
Ошибка вылетает на iconv, разве в PHP есть ограничение на размер массива?
Решение не самое красивое, но как обычно решают такие проблемы? Может есть более красивый способ конвертации?
Ситуация такая - специальная прога под виндами создает XML файл (в кодировке win1251) и отсылает его на FTP хостинга. Проблема в том, что файл XML в win1251, а скрипту нужен UTF-8, т.е. файл надо переконвертировать. На хостинге стоит скрипр PHP4 и его задача прочитать этот XML файл и выдернуть все данные из него в базу mysql. Все это реализованно и работает, но проблема с файлами большого объема - вылетают ошибки.
Вот самое узкое место:
PHP:
$XML_File_Name = 'data/file.xml';
// Проверяем существование файла
if (file_exists($XML_File_Name)){ // Файл существует
// Открываем XML файл
// Считываем весь файл в массив
$File_Array = file($XML_File_Name);
$Temp_Str = '';
// Делаем перекодировку
for ($i = 0; $i < sizeof($File_Array); $i++)
$Temp_Str.= iconv('windows-1251', 'utf-8', $File_Array[$i]);
// Открываем XML файл
$dom1 = domxml_open_mem($Temp_Str);
// Если ошибок нет - значит работаем
if ($dom1) {
// Узнаем корневой элемент
$root = $dom1->document_element();
// Массив дочерних элементов корневого
$root_child = $root->child_nodes();
Ошибка вылетает на iconv, разве в PHP есть ограничение на размер массива?
Решение не самое красивое, но как обычно решают такие проблемы? Может есть более красивый способ конвертации?