首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在mod_perl环境中调用清理代码

在mod_perl环境中调用清理代码
EN

Stack Overflow用户
提问于 2009-06-26 04:22:20
回答 2查看 435关注 0票数 3

从实际的mod_perl中挑选一些引文

“通常,单个进程在退出之前处理多个请求,因此,如果在每个请求的处理结束时都需要执行某些操作,则不能使用结束块。”

所以,在我的a.cgi脚本中:

代码语言:javascript
代码运行次数:0
运行
复制
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->注册清理(子{#清理} );

然而,

  1. 如何在$r脚本中获得a.cgi?
  2. 子例程可以访问my标志变量吗?
  3. 这个$r->寄存器清理应该放在a.cgi脚本中吗?我只希望为a.cgi脚本执行清理代码。而不是剩下的。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-26 04:52:37

  1. 我的$r =Apache->请求;
  2. 是的,但是请参阅http://modperlbook.org/html/6-2-Exposing-Apache-Registry-Secrets.html和接下来的几页,关于局部变量和函数的作用域。
  3. 是的,只有在要运行函数时才注册它。
票数 4
EN

Stack Overflow用户

发布于 2009-06-26 10:43:41

如果我正确理解了这一点,那么您将有一个脚本,您希望在mod_perl下和作为一个普通的CGI运行脚本,而且听起来您正在使用Apache::注册表来完成这个任务。

只有在以CGI脚本运行时才需要运行清理代码。

您需要检测您是否在mod_perl下运行。这相当容易。最简单的方法是检查您的环境:

代码语言:javascript
代码运行次数:0
运行
复制
unless ($ENV{MOD_PERL})
{
   #... cleanup code here.
}

只有当脚本在Apache::注册表下终止时,您才需要注册清理处理程序。

如果您确实想要这样做,您应该将清理代码放入子程序中,并从CGI中的检查中调用该子代码:

代码语言:javascript
代码运行次数:0
运行
复制
unless ($ENV{MOD_PERL})
{
   cleanup_sub();
}

从你的清理管理员那里:

代码语言:javascript
代码运行次数:0
运行
复制
my $r = Apache->request;
$r->register_cleanup(sub { cleanup_sub() } );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1047314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档