OVH Cloud OVH Cloud

mod-perl

6 réponses
Avatar
Alexandre Jaquet
Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes scripts
compatible à mod_perl et j ai une erreur donc je ne comprend pas la
provenance :

ModPerl::Registry : Undefined subroutine CGI:delete

#!perl -w
#TODO : add user input control to avoid sqlinjection and null caracter

use CGI qw(:standard);
use Switch;
use MIME::Lite;
use Digest::MD5 qw(md5_hex);
use DBI;

use Date::Manip;
use POSIX qw(strftime);
use CGI::Session qw/-ip-match/;
use strict;
use warnings;

my $lang, my %SERVER,
my %PAYPALL, my %WISHLIST;

my $dbh = DBI->connect( "DBI:mysql:recordz:localhost", "xxx", "xx" );


$INDEX = '0';
%WISHLIST = ();
%PAYPALL = ();
%VALUE = ();
%ERROR = ();
%LABEL = ();
$LANG = "";
%VINYL = ();
%SESSION = ();
%SERVER = ();

my $query = CGI->new( );
my $action = $query->param('action');


loadLanguage ();
loadError();

sub loadLanguage {
$lang = uc (param('lang'));
my $dir = "C:/indigoperl/apache/htdocs/recordz/lang";
open (FILE, "<$dir/$lang.conf") or die "cannot open file
$dir/$lang.conf";
while (<FILE>) {
(my $label, my $value) = split(/=/);
$SERVER{$label} = $value;
}
close (FILE);
}

sub loadError {
$lang = param('lang');
my $dir = "C:/indigoperl/apache/htdocs/recordz/lang/$lang/error.conf";
open (FILE, "<$dir") or die "cannot open file $dir";
while (<FILE>) {
(my $label, my $value) = split(/=/);
$SERVER{$label} = $value;
}
close (FILE);
}

J ai également une petite question sur le partage des variables et
compagnie.


Lorsque en mod_perl je fais les opérations suivantes :

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une nouvelle
valeure ou si c'est une variable partagé.

De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.

D'avance merci

6 réponses

Avatar
Alexandre Jaquet
Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes scripts
compatible à mod_perl et j ai une erreur donc je ne comprend pas la
provenance :

ModPerl::Registry : Undefined subroutine CGI:delete

#!perl -w
#TODO : add user input control to avoid sqlinjection and null caracter

use CGI qw(:standard);
use Switch;
use MIME::Lite;
use Digest::MD5 qw(md5_hex);
use DBI;

use Date::Manip;
use POSIX qw(strftime);
use CGI::Session qw/-ip-match/;
use strict;
use warnings;

my $lang, my %SERVER,
my %PAYPALL, my %WISHLIST;

my $dbh = DBI->connect( "DBI:mysql:recordz:localhost", "xxx", "xx" );


$INDEX = '0';
%WISHLIST = ();
%PAYPALL = ();
%VALUE = ();
%ERROR = ();
%LABEL = ();
$LANG = "";
%VINYL = ();
%SESSION = ();
%SERVER = ();

my $query = CGI->new( );
my $action = $query->param('action');


loadLanguage ();
loadError();

sub loadLanguage {
$lang = uc (param('lang'));
my $dir = "C:/indigoperl/apache/htdocs/recordz/lang";
open (FILE, "<$dir/$lang.conf") or die "cannot open file
$dir/$lang.conf";
while (<FILE>) {
(my $label, my $value) = split(/=/);
$SERVER{$label} = $value;
}
close (FILE);
}

sub loadError {
$lang = param('lang');
my $dir = "C:/indigoperl/apache/htdocs/recordz/lang/$lang/error.conf";
open (FILE, "<$dir") or die "cannot open file $dir";
while (<FILE>) {
(my $label, my $value) = split(/=/);
$SERVER{$label} = $value;
}
close (FILE);
}

J ai également une petite question sur le partage des variables et
compagnie.


Lorsque en mod_perl je fais les opérations suivantes :

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une nouvelle
valeure ou si c'est une variable partagé.

De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.

D'avance merci


Il manque la déclaration de my %ERROR pour ceux qui veulent test

Avatar
Lyriel
Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes scripts
compatible à mod_perl et j ai une erreur donc je ne comprend pas la
provenance :

ModPerl::Registry : Undefined subroutine CGI:delete




Vérifie la version du module CGI installé.
Si mod_perl 2.0 alors fait une màj installe la dernière version (3.10) si
mod_perl 1.99 (ou dans le genre) installe le module CGI v3.7

J ai également une petite question sur le partage des variables et
compagnie.


Lorsque en mod_perl je fais les opérations suivantes :

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une nouvelle
valeure ou si c'est une variable partagé.




Les POST ne sont pas gardé en mémoire normalement.

De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.




Alors je ne suis pas un pro de mod_perl, je débute là dessus depuis quelques
jours ...
Mais j'ai cru comprendre :
Si tu déclare par exemple :
my $var = 0;
$var++;
$var aura pour valeur 1 puis 2, 3 etc...

Par contre je crois que :
$var = 0;
$var++

il me semble qu'a chaque appel du script $var sera remis à zero ...

Voilà.. ce thread va m'interesser, car je galère un peu avec mod_perl ;-)

Guillaume B.


Avatar
Alexandre Jaquet

Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes scripts
compatible à mod_perl et j ai une erreur donc je ne comprend pas la
provenance :

ModPerl::Registry : Undefined subroutine CGI:delete





Vérifie la version du module CGI installé.
Si mod_perl 2.0 alors fait une màj installe la dernière version (3.10) si
mod_perl 1.99 (ou dans le genre) installe le module CGI v3.7


J ai également une petite question sur le partage des variables et
compagnie.


Lorsque en mod_perl je fais les opérations suivantes :

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une nouvelle
valeure ou si c'est une variable partagé.





Les POST ne sont pas gardé en mémoire normalement.


De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.





Alors je ne suis pas un pro de mod_perl, je débute là dessus depuis quelques
jours ...
Mais j'ai cru comprendre :
Si tu déclare par exemple :
my $var = 0;
$var++;
$var aura pour valeur 1 puis 2, 3 etc...

Par contre je crois que :
$var = 0;
$var++

il me semble qu'a chaque appel du script $var sera remis à zero ...

Voilà.. ce thread va m'interesser, car je galère un peu avec mod_perl ;-)

Guillaume B.




Ok merci pour les précisions, je pense d'abord terminé la version 1 de
mon produit avant de passé à mod_perl.

++



Avatar
Jacques Caron
Salut,

On Mon, 13 Jun 2005 04:52:12 +0200, Alexandre Jaquet
wrote:

Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes scripts
compatible à mod_perl et j ai une erreur donc je ne comprend pas la
provenance :

ModPerl::Registry : Undefined subroutine CGI:delete


Le message d'erreur devrait être un chouïa plus détaillé, non? Avec en
particulier le fichier et la ligne où se produit l'erreur?

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une nouvelle
valeure ou si c'est une variable partagé.


Suivant la méthode d'intégration et le contexte la variable sera partagée
ou pas. Sans plus d'infos sur ces éléments, difficile à dire.

De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.


Si une variable est déclarée dans le scope global d'un module (en dehors
de toute fonction) elle sera partagée entre les instances successives du
même processus Apache. Si une variable est déclarée dans une fonction,
elle sera locale à cette fonction. Si tu utilises Apache::Registry (avec
Apache & mod_perl 1.x, je suppose que c'est pareil avec Modperl::Registry
en 2.x), le script tout entier que tu donnes est inclus dans une fonction,
donc toutes les variables sont locales à cette fonction. Si tu veux avoir
des variables persistentes d'un appel au suivant, il faut utiliser des
modules séparés, ou des modules appelés directement à partir de httpd.conf
avec Perl*Handler.

Attention: quoi qu'il arrive, le partage ne se fait bien qu'entre appels
successifs dans le même processus httpd. Les différents processus httpd ne
partagent que ce qui a été défini au lancement du serveur, avant que les
processus fils ne soient forkés.

Jacques.

Avatar
Alexandre Jaquet
Salut,

On Mon, 13 Jun 2005 04:52:12 +0200, Alexandre Jaquet
wrote:

Salut j'ai un petit soucie avec mod_perl, j'essaye de rendre mes
scripts compatible à mod_perl et j ai une erreur donc je ne comprend
pas la provenance :

ModPerl::Registry : Undefined subroutine CGI:delete



Le message d'erreur devrait être un chouïa plus détaillé, non? Avec en
particulier le fichier et la ligne où se produit l'erreur?

my $query = CGI->new( );
my $action = $query->param('action');

J aimerais savoir si à chaque GET ou POST celle-ci prendra une
nouvelle valeure ou si c'est une variable partagé.



Suivant la méthode d'intégration et le contexte la variable sera
partagée ou pas. Sans plus d'infos sur ces éléments, difficile à dire.

De la même manière j'ai plusieurs variables globales et table de hash
dont je ne connais pas comment le comportement sous mod-perl.



Si une variable est déclarée dans le scope global d'un module (en
dehors de toute fonction) elle sera partagée entre les instances
successives du même processus Apache. Si une variable est déclarée dans
une fonction, elle sera locale à cette fonction. Si tu utilises
Apache::Registry (avec Apache & mod_perl 1.x, je suppose que c'est
pareil avec Modperl::Registry en 2.x), le script tout entier que tu
donnes est inclus dans une fonction, donc toutes les variables sont
locales à cette fonction. Si tu veux avoir des variables persistentes
d'un appel au suivant, il faut utiliser des modules séparés, ou des
modules appelés directement à partir de httpd.conf avec Perl*Handler.

Attention: quoi qu'il arrive, le partage ne se fait bien qu'entre
appels successifs dans le même processus httpd. Les différents
processus httpd ne partagent que ce qui a été défini au lancement du
serveur, avant que les processus fils ne soient forkés.

Jacques.


Merci de tes explications :)


Avatar
Lyriel
Mais j'ai cru comprendre :
Si tu déclare par exemple :
my $var = 0;
$var++;
$var aura pour valeur 1 puis 2, 3 etc...

Par contre je crois que :
$var = 0;
$var++

il me semble qu'a chaque appel du script $var sera remis à zero ...

Voilà.. ce thread va m'interesser, car je galère un peu avec mod_perl ;-)

Guillaume B.




Ok merci pour les précisions, je pense d'abord terminé la version 1 de mon
produit avant de passé à mod_perl.

++


J'oubliais que quand je dis "gardé en mémoire", c'est pour un même processus
httpd.