如何在后台运行PHP脚本?

时间:2011-12-09 22:30:44

标签: php concurrency

我有一个脚本,我们称之为linkchecker,它循环访问大约10.000个URL,检查它们是否为http状态代码。 选中它们后,我的数据库中的URL被标记为已选中。 它完成之前不会输出任何东西,这可能需要很长时间。

所以我想到了另一个脚本将在后台运行linkchecker,同时不断轮询数据库有关检查了多少个URL,因此我可以跟踪进度,如果有任何URL出现长连接问题时间等等。

我尝试在iframe中运行linkchecker,但在linkchecker完成之前不会加载任何内容。

当主脚本正常运行,执行其他任务时,如何在后台执行此linkchecker?

3 个答案:

答案 0 :(得分:2)

您必须设置一个cron作业(如果您运行的是Linux)执行 curl 命令来访问PHP脚本(外部,如'curl http://domain.com/php/something.php')或只是执行指向内部文件的 php 命令。

您可以制作一个调度程序,每分钟执行一次(这是cron作业支持的最短执行时间)并执行工作的“块”。当然,您必须将PHP设置为跳过默认使用的30秒执行限制。

答案 1 :(得分:0)

在DB中创建一个列,您可以调用“Checked”。只需进行数据库中检查的PHP脚本更新即可。使用phpMyAdmin以图形方式查看数据库,只需选择在“已检查”列后排序,然后您就可以看到它已经走了多远。

您必须这样做,因为在脚本完成之前,网页不会更新。但是你可以让脚本运行另一个脚本来说明这个过程有多远,但那可能太费时了?

你还必须进入php.ini来检查max_execution_time是否设置为几个小时。 60 * 60 * 24 = 1天= 86 400秒。

希望这有帮助! :)

答案 2 :(得分:0)

我建议向新页面发出一个AJAX请求,我们称之为ajaxChecker.php

在thuis页面中,只是看看是否有未经检查的URL(返回号码) 如果未选中的数量为零,则回显新div中的输出

function checker()
{
    $.post('ajaxChecker.php',function(data){
    if(data.length > 0)
    $('#result').html(data); 
    });
}

setInterval( "checker()", 10000 );

当然,通过ajax或cron作业发出请求,先启动它