私はこのようなクローラー機能を持っています:
function crawl_page($url) {
static $j;
echo "recur no:".++$j."\n";
static $seen = array();
if (isset($seen[$url]) ) {
return;
}
$seen[$url] = true;
// some more code
foreach($links as $link) {
$link .= '?start='.rand(1,300)*50;
crawl_page($link );
}
unset($links);
}
スクリプトはコンソールでローカルに実行されます。内部の静的配列は非常に大きく、何千もの要素になる可能性があります。メモリ内のデータは同じですか、それとも新しい再帰呼び出しが行われるたびにコピーされますか? 2000 回または 3000 回の繰り返しの後、php プロセスが大きすぎて、メモリが 1 GB を超え、最終的にクラッシュします。各再帰が大量のメモリを使用しているようです。理由は何ですか?