【问题标题】:Values lifetime in mod_perlmod_perl 中的值生命周期
【发布时间】:2017-05-16 14:52:00
【问题描述】:

.pm 文件:

package fo_condition_editor;

use utf8;
use diagnostics -trace;
use strict;
use warnings FATAL => 'all';

{...}

use Encode;

my $msg = {};

return 1;
{..}
sub ..() {
$msg->{saved} = 1;

我使用这个 pm 来显示弹出窗口。提交表单时,会刷新弹出窗口。

在我的本地服务器中一切正常,但在其他服务器中我遇到了变量 $msg 的问题。 $msg 在打印过程中是空的,但是当我在 $msg 中再次提交时是旧东西。

我认为是 apache 配置的问题。

【问题讨论】:

    标签: apache perl variables mod-perl


    【解决方案1】:

    问题——如果我理解正确的话——是代码

    my $msg = {};
    

    仅在第一次需要/使用此包时执行。之后(在当前的 mod_perl 实例中)这将不再执行,并且 $msg 保留它对下一个请求的任何值。

    有很多方法可以解决这个问题。我有时使用的一种模式是为我使用的每个“包/模块实体”定义一个“拆卸/重置”方法。在包本身中,我将此方法的引用推送到全局变量。在 mod_perl 调用的“核心处理程序”中,我有一个拆卸/重置方法,它遍历已注册的处理程序并调用它们来重置数据。

    HTH 乔治

    【讨论】:

    • 我希望只执行一次。我不明白为什么在一台服务器上工作正常,但在另一台服务器上却不行。我认为,问题出在 apache 配置中。
    • mod_perl 的一点是,您通常不会在包级别为每个请求执行静态代码,而只是第一次执行。无论如何,我想您可以在您的 vhost/apache 配置中将 PerlInterpMaxRequests 设置为 1 以禁用此行为。
    猜你喜欢
    • 2013-03-19
    • 2014-05-18
    • 2019-12-18
    • 2015-11-18
    • 2014-09-10
    • 2013-04-06
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多