我在一个函数中运行了一个很长的循环,但没有完成所有最终的迭代并停止而不给出任何错误:
function my_function(){
foreach (range(100,999) as $art_id){
$current++;//see bottom flush functions...
outputProgress($current, $art_id );//see bottom flush functions...
// do a lot of stuff on remote URL...
// including download images ,
// scraping HTMl etc ..
}
}
我正在使用一些输出进度和刷新来跟踪进度
function outputProgress($current, $total) {
// echo "<span style='background:red;font-size:1.5em;color:#fff;'>" . round($current / $total * 100) . "% </span>";
echo "<span style='background:red;font-size:1.5em;color:#fff;'>" . $current .'/'. $total . "% </span>";
myFlush();
sleep(1);
}
和
function myFlush() {
echo(str_repeat(' ', 256));
if (@ob_get_contents()) {
@ob_end_flush();
}
flush();
}
(不要介意百分比计算,它现在被禁用,只显示迭代的 ID)
我注意到大部分时间我都在执行循环,它会在 20-25 次迭代后停止。有时只有 10 个。
我的第一个嫌疑人是time limit
, 和max_execution time
,所以我补充说:
set_time_limit(99999);
ini_set('max_execution_time', 99999);
function my_function(){
foreach (range(410,499) as $art_id){ // done 500-600
set_time_limit(99999);
ini_set('max_execution_time', 99999);
// do a lot of stuff on remote URL...
// including download images ,
// scraping HTMl etc ..
}
}
正如你所看到的,我已经添加了这些INSIDE
和OUTSIDE
函数本身,以防万一。
但这并没有多大帮助,循环仍然停止。我的下一个嫌疑人是Memory limit
,所以我补充说:
ini_set('memory_limit','128M');
由于我正在研究 wp,我也尝试过
define('WP_MEMORY_LIMIT', '128M');
但无济于事。经过少量迭代后,scipt 仍然停止。
- 这种行为的其他可能原因是什么,以及可能的补救措施?
请注意 - 脚本没有给出任何错误,它只是在某个循环处停止。
编辑我
我已将脚本粘贴在这里 。它实际上是simplehtmldom lib 包含的示例中稍微修改的 scrap_slashdot() 函数。
它被修改为插入 wordpress 帖子,同时还下载图像并附加它们。
EDIT II
使用@Allendar 评论echo ini_get('memory_limit');
似乎可行,并且设置为 128M ..