从实际的mod_perl中挑选一些引文
“通常,单个进程在退出之前处理多个请求,因此,如果在每个请求的处理结束时都需要执行某些操作,则不能使用结束块。”
所以,在我的a.cgi脚本中:
my $flag = 1;
END {
# Value for $flag is undefined, if this script is run under mod_perl.
# END block code only executed when process to handle a.cgi exit.
# I wish to execute some code, just before process to handle a.cgi exit.
if ($flag) {
# clean up code.
}
}
这本书重新开始$r->注册清理(子{#清理} );
然而,
发布于 2009-06-25 20:52:37
发布于 2009-06-26 02:43:41
如果我正确理解了这一点,那么您将有一个脚本,您希望在mod_perl下和作为一个普通的CGI运行脚本,而且听起来您正在使用Apache::注册表来完成这个任务。
只有在以CGI脚本运行时才需要运行清理代码。
您需要检测您是否在mod_perl下运行。这相当容易。最简单的方法是检查您的环境:
unless ($ENV{MOD_PERL})
{
#... cleanup code here.
}
只有当脚本在Apache::注册表下终止时,您才需要注册清理处理程序。
如果您确实想要这样做,您应该将清理代码放入子程序中,并从CGI中的检查中调用该子代码:
unless ($ENV{MOD_PERL})
{
cleanup_sub();
}
从你的清理管理员那里:
my $r = Apache->request;
$r->register_cleanup(sub { cleanup_sub() } );
https://stackoverflow.com/questions/1047314
复制相似问题