我有一些用于计划导入的相当大的 xml 文件。我使用 cron 来解析它们。问题是处理需要太多时间并且总是超过 php“max_execution_time”。由于我使用 XMLReader,它允许“逐行”读取 xml,我看到的唯一一个解决方案是:跟踪当前工作的“节点”,记住它并在下一次 cron 运行时设置节点偏移量。
我现在有
$xml = new XMLReader;
$xml->open($file);
$pointer = 0;
while($xml->read()) {
if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'Product') {
$chunk = array();
$chunk['ProductID'] = $xml->getAttribute('ProductID');
$chunk['ProductName'] = $xml->getAttribute('ProductName');
process_import($chunk); // Process received date
save_current_node_in_BD($pointer++); // insert current position in BD
}
}
$xml->close();
}
使用 $pointer++ 来计算处理的节点是个好主意吗? 如何为下一次 cron 运行设置偏移量?