我正在使用PHP从sql查询创建一个xml文件。 如果查询返回超过大约500条记录,则xml文件未完全写入,我从PHP服务器收到错误消息:
“服务器暂时无法为您提供服务 由于维护停机或容量的要求 问题。“
我不确定我是否正确这样做。我可以在VB中做同样的事情没有问题。完成的sql查询应该有大约5000条记录,大小约为4mb。
以下是我正在使用的代码:
$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可以处理的记录数量必须有限制吗?
答案 0 :(得分:0)
您提供的错误消息:
“由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。”
不是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,因此您不需要在该方法调用之前调用它一行。
希望这可以帮助你解决问题。