2017-01-02 5 views
0

.pm Datei:Werte Lebensdauer in 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; 

Ich benutze diese Uhr Popup zu zeigen. Wenn das Formular gesendet wird, wird das Popup aktualisiert.

In meinem lokalen Server funktioniert alles gut, aber in anderen Server hatte ich ein Problem mit Variablen $ msg. $ msg ist während des Druckens leer, aber wenn ich wieder in $ msg sende, sind alte Dinge.

Ich denke, ist ein Problem mit der Apache-Konfiguration.

Antwort

0

Die probloem - wenn ich das richtig bekommen - ist, dass der Code

my $msg = {}; 

nur dann ausgeführt wird, wenn dieses Paket/verwendet zum ersten Mal erforderlich. Danach (in der aktuellen mod_perl-Instanz) wird dies nicht mehr ausgeführt, und $ msg behält den Wert, den es für die nächsten Anfragen hat.

Es gibt viele Möglichkeiten, dieses Problem zu umgehen. Ein Schema, das ich manchmal benutze, besteht darin, für jedes von mir verwendete "Paket/Modul-Entity" eine Methode "Abreißen/Zurücksetzen" zu definieren. Im Paket selbst schiebe ich eine Referenz dieser Methode auf eine globale Variable. Und in meinem "core-Handler", der von mod_perl aufgerufen wird, habe ich eine Methode zum Aufheben/Zurücksetzen, die über die registrierten Handler iteriert und sie aufruft, um die Daten zurückzusetzen.

HTH Georg

+0

Ich möchte, dass execut nur einmal war. Ich verstehe nicht, warum auf einem Server funktioniert, aber auf einem anderen nicht. Ich denke, Problem ist in der Apache-Konfiguration. –

+0

Ein Punkt von mod_perl ist, dass Sie normalerweise nicht den statischen Code auf der Paketebene für jede Anfrage ausführen, sondern nur das erste Mal. Wie auch immer, ich denke, Sie könnten PerlInterpMaxRequests in Ihrer vhost/apache-Konfiguration auf 1 setzen, um dieses Verhalten zu deaktivieren. –