Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > парсинг большого xml файла с помощью php


Автор: lasalexx 15.7.2009, 17:11
Читаю данные из mysql и передаю эти данные клиенту в виде xml файла. Конечный размер xml примерно 6мб.

Содержымое передаю по частям. На локальном сервере всё ok, но как только загружаю php на сервер, при большом количестве информации, сервер выдаёт ошибку. Что может быть не так?

Код

define('CHUNK_SIZE', 100);

$query='SELECT * FROM `tbl`';
$res=mysql_query($query.' LIMIT 0,'.CHUNK_SIZE,$myiden) or die(mysql_error());

$str='';
$numr=mysql_num_rows($res);

header("Content-type: text/xml");
header("Content-Disposition: attachment; filename=db.xml;");
header("Accept-Ranges: bytes");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

if ($numr>0){
    $str='<?xml version="1.0" encoding="UTF-8"?>
<cars>
    ';
    $p=1;
    while ($numr>0)
    {
    $k=0;
    while ($row=mysql_fetch_assoc($res)){
        $str=$str.'<car id="'.$row['id'].'">
        ';
        foreach ($row as $i=>$e){
            $str=$str.'<'.$i.'>'.stripslashes($e).'</'.$i.'>
    ';
            }
        $str=$str.'</car>
';
        $k++;
        }
    mysql_free_result($res);
    
    echo $str;
    @ob_flush();
    @flush();
    $str='';
    $st=$p*CHUNK_SIZE;
    $res=mysql_query($query.' LIMIT '.$st.','.CHUNK_SIZE,$myiden) or die(mysql_error());
    $numr=mysql_num_rows($res);
    $p++;
    }

    $str=$str.'</cars>';
    }

echo $str;
@ob_flush();
@flush();

mysql_free_result($res);
mysql_close();
exit();

Автор: patap 15.7.2009, 17:24
ты лучше бы для начала ошибку показал

Автор: lasalexx 15.7.2009, 21:30
Цитата

Error 500!

/data3.php
Internal Server Error! 

Автор: patap 15.7.2009, 23:53
и думаю логи нужно тоже посмотреть ))


может проблема в хидерах

Автор: Ипатьев 16.7.2009, 08:37
Непонятно, при чем здесь парсинг.
Парсинг - это разбор файла. а здесь обычная отдача текста, которая ничем не отличается от работы любого другого пеп скрипта, который читает данные из базы и выдает их в браузер. 
Зачем только их предварительно накапливать в памяти, все 6 мегабайт - для меня загадка.

Автор: lasalexx 16.7.2009, 10:57
Ипатьев, 
Цитата

Зачем только их предварительно накапливать в памяти, все 6 мегабайт - для меня загадка. 

Все 6мб вместе не получается. Поэтому выдаю информацию по частям. Но всё равно не получается :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)