【发布时间】:2014-09-11 08:13:44
【问题描述】:
我检查了很多问题,但没有得到答案。
我有一个需要解析的大 XML 文件。目前我正在用 XMLReader 解析它。在我开始将它插入 SQL db 之前它工作得很好。如果我只回显解析 xml,它可以正常工作,如果我插入它,我会收到 504 Gateway Time-out 错误。这是我的代码示例:
我在哪里解析 xml:
$xml = new XMLReader();
$xml->open(APP_PATH_OWA."/trnUpload/TRNavteraData.xml");
while($xml->read()){
//get products
if($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'table'){
$product = array();
}
if($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'ident'){
$xml->read();
$product['id'] = $xml->value;
}
...
Foreach:
foreach($products as $product){
...
$productTitle = $product['title'];
$productID = $product['id'];
$productImageUrl = "http://www.example.com/logo.png";
$productAttrHtml = $product['computed'];
// after that I'm inserting those data using ZEND framework.
XML 文件大约有 300k+ 行。
整个php函数:http://pastebin.com/S8A5Rdjw
【问题讨论】:
-
由于问题是在您开始将内容插入数据库时出现的,因此分享这部分代码可能会很有趣。没有DB进程需要多长时间?
-
我马上分享,没有数据库进程用不了多久。我又想到了一件事,在我得到 504 网关超时后,我无法访问我网站的任何部分,我认为整个服务器超时。几分钟后(15-20)服务器开始正常运行,来自 XML 的文章存储在数据库中。 pastebin.com/S8A5Rdjw - 这是我的功能。
-
您使用的是 Apache 还是 NGINX?您是否尝试过增加 php 超时限制?如果没有,请尝试将
set_time_limit(0);放在脚本顶部。 -
我已经更改了超时限制,我正在使用 NGINX。