2017-01-02 90 views
0

的.pm文件:價值觀一生中的mod_perl

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; 

我用這點來顯示彈出。當表單被提交時,彈出窗口被刷新。

在我的本地服務器一切工作正常,但在其他服務器我有變量$味精的問題。 $ msg在打印過程中是空的,但是當我在$ msg中再次提交時是舊的。

我認爲是Apache配置的問題。

回答

0

的probloem - 如果我得到這個正確的 - 是代碼

my $msg = {}; 

是當需要這個包用於僅第一次執行/。在此之後(在當前的mod_perl實例中),這不會再被執行,並且$ msg會保留它對於下一個請求的任何值。

有很多方法可以解決此問題。我使用過的一種模式是爲我使用的每個「包/模塊實體」定義一個「拆卸/重置」方法。在包本身中,我將此方法的引用推送到全局變量。在我的mod_perl調用的「core-Handler」中,我有一個拆卸/重置方法,它遍歷已註冊的處理程序並調用它們來重置數據。

HTH Georg

+0

我想這只是執行一次。我不明白爲什麼在一臺服務器上工作正常,但另一臺沒有。我認爲,問題是在Apache配置。 –

+0

mod_perl的一點是,您通常不會在每個請求的包級別上執行靜態代碼,但只是第一次。無論如何,我想您可以在您的vhost/apache配置中將PerlInterpMaxRequests設置爲1來禁用此行爲。 –