スケジュールされたインポートに使用されるかなり大きな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実行のオフセットを設定するにはどうすればよいですか?