Ограничение размера файла php XMLwriter

Я создаю файл xml из запроса sql, используя PHP. Если запрос возвращает более 500 записей, файл xml записан не полностью, и я получаю сообщение об ошибке от сервера PHP:

«Сервер временно не может обслужить ваш запрос из-за простоя на техническое обслуживание или проблем с пропускной способностью».

Я не уверен, правильно ли я это делаю или нет. Я могу сделать то же самое в VB без проблем. Готовый SQL-запрос должен содержать около 5000 записей и иметь размер около 4 МБ.

Вот код, который я использую:

$writer = new XMLWriter();
$writer->openUri('mydoc.xml');
$writer->startDocument('1.0', 'UTF-8');
$writer->setIndent(4);
$writer->startElement('FE_Time');  //create root element

while ($row = oci_fetch_assoc($db->result)){ 

  //I load data from the oracle query into variables and use them below:

     $writer->startElement('Item'); //create item element
         $writer->writeElement("Plate_No", $Plate_No);
         $writer->writeElement("Job_No", $Job_No);
         $writer->writeElement("Hold_Time", $Hold_Time);
         $writer->writeElement("OE_Time", $OE_Time);
         $writer->writeElement("Ship_Date", $Ship_Date);
     $writer->endElement(); //end the Item Element
}

$writer->endElement(); //end the FE_Time root element
$writer->endDocument(); //close the document
$writer->flush();  //clear the memory

unset($db); //close db connection

Мы будем очень признательны за любую помощь, которую вы можете оказать, я думаю, что должен быть предел тому, сколько записей может обрабатывать xmlWriter?


person user3101337    schedule 23.12.2013    source источник


Ответы (1)


Сообщение об ошибке, которое вы даете:

«Сервер временно не может обслужить ваш запрос из-за простоя на техническое обслуживание или проблем с пропускной способностью».

Это не конкретное сообщение об ошибке PHP, а от вашего веб-сервера. Включите ведение журнала ошибок PHP, найдите журнал ошибок и найдите точную ошибку, которая более подробно описывает, что происходит.

Пока для устранения неполадок.

Общее сообщение об ошибке намекает на то, что у вас закончились ресурсы сценария. Это может быть связано с тем, что ваш скрипт разбился, закончилась память или закончилось время (я могу только догадываться, а не лучше сказать, поскольку ошибка PHP отсутствует, так что это только для общего направления).

Одна потенциальная вещь, которую вы могли бы сделать, это переместить флеш

$writer->flush();  //clear the memory

в цикл while, чтобы файл записывался на диск для каждого $row:

while ($row = oci_fetch_assoc($db->result)) {

    ...

    $writer->endElement(); //end the Item Element
    $writer->flush();
    #################
}

Также

$writer->endDocument();

также очистит XMLWriter, поэтому вам не нужно вызывать его за одну строку до вызова этого метода.

Надеюсь, это поможет вам наладить работу.

person hakre    schedule 24.12.2013
comment
Спасибо за помощь, буду реализовывать то, что вы предложили. После некоторого тестирования выясняется, что это мой запрос оракула, который веб-сервер не может обработать. Кажется, время истекло. Как включить ведение журнала ошибок PHP, чтобы увидеть, что происходит? - person user3101337; 25.12.2013
comment
Одна вещь, которая мне помогла, это убедиться, что header('Content-type: text/xml'); находится в верхней части скрипта. - person Cesar Bielich; 12.03.2018