我有一个像这样的爬虫功能:
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,最后崩溃。似乎每个递归都使用了过多的内存。是什么原因?