Schrift
[thread]3224[/thread]

2 Fragen: Use strict und Apacheneustart? (Seite 2)



<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten
olruebe01
 2006-12-14 14:41
#30274 #30274
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Hallo renee...
ich bin noch nicht soooo wahnsinnig tief im Thema. Ich weiß, dass ich hier noch VIELES verbessern kann...
Mühsam ernährt sich das Eichhörnchen...
olruebe01
 2006-12-14 14:48
#30275 #30275
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Wenn ich eben richtig gelesen habe, muss ich das nur so machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Begin {
my @arrnameval;
my %FORMDATA;
my $querystring;
my $nam;
my $val;
my $namval;
my $ergebnis="";
my $fehlermeldung;
$FORMDATA{item}=0;
$FORMDATA{Galerie}="";
$FORMDATA{User};
}

--- Modedit Gwendragon
Code-Tag geschlossen
---

Mehr nicht, richtig? ICh muss das nicht ausrufen oder so. Das geschieht automatisch, wenn ich das richtig verstanden habe.
Stimmt's?

Und wie mache ich das mit END? Genauso oder muss ich die Variablen alle leeren, also z.B. mit %FORMDATA = ();
?\n\n

<!--EDIT|GwenDragon|1166101830-->
GwenDragon
 2006-12-14 15:11
#30276 #30276
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
BEGIN {
# hier dein Perlcode
# gut zum "Initialisieren"
}
END {
# hier dein Perlcode, der am Ende des Skripts laufen soll
# gut zum "Aufräumen"
}
\n\n

<!--EDIT|GwenDragon|1166101932-->
olruebe01
 2006-12-14 15:15
#30277 #30277
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Habe ich mal so versucht...
AM Anfang habe ich ja einige Variablen deklariert (einige später). Diesen Teil habe ich jetzt wie in meiner letzten Frage in BEGIN { und } gesetzt. Nun läuft das Script gar nicht mehr mit der Meldung, alle Variablen müssten erst deklariert werden. Also anscheind wir dieser Code dann nicht mehr ausgeführt. Muss ich die Blöcke noch "aufrufen" oder sowas? Ich habe den Block auch wirklich BEGIN genannt (Großbuchstaben).

Habe eben ein kurzes Testscript geschrieben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w

use warnings;
use strict;
print "Content-type: text/html;CHARSET=iso-8859-1\n\n";
END {
print "TEIL END ";
}

print "Hallo ";

BEGIN {
print "Teil BEGIN ";
}


Ausgabe: "Hallo TEIL END"
Der Teil BEGIN läuft also nicht...\n\n

<!--EDIT|olruebe01|1166102626-->
.mike.
 2006-12-14 16:39
#30278 #30278
User since
2006-04-07
26 Artikel
BenutzerIn
[default_avatar]
vielleicht solltest du den BEGIN block einfach an den Beginn deines Skriptes stellen und den END block ans Ende...

#edit: so hats zumindest bei mir immer funktioniert
pq
 2006-12-14 16:47
#30279 #30279
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also my() in ein BEGIN zu schreiben ist ziemlich sinnlos.
warum willst du %FORMDATA in einen begin-block schreiben?
%FORMDATA ist bei jedem request anders und sollte deswegen nur
in dem scope eines requests ueberhaupt definiert sein!
und mike, es ist egal, wo der block steht. wirklich.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
olruebe01
 2006-12-14 17:04
#30280 #30280
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
@mike: Ich hade das im Test extra so gemacht um zu prüfen, dass die richtige Reihenfolge eingehalte wird (also erst beginn, dann XYZ, dann END).

@pq: Ich hatte den BEitrag von gwendragon so verstanden, dass ich es so machen soll...
MEinst Diu in etwa so?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{

my %FORMDATA; #### ALSO ZB HIER???

$querystring = $ENV{'QUERY_STRING'};
}
@arrnameval = split(/&/, $querystring);

foreach $namval (@arrnameval)
{

($nam, $val) = split(/=/, $namval
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORMDATA{$nam} = $val;
}
renee
 2006-12-14 17:07
#30281 #30281
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, das geht nicht, weil dann %FORMDATA nur für den if-Block definiert ist. Ich hoffe, Wiki:der Artikel hilft da etwas weiter!

Und wie gesagt, %FORMDATA solltest Du mit CPAN:CGI füllen:
Code: (dl )
1
2
3
use CGI;
my $cgi = CGI->new();
my %FORMDATA = $cgi->Vars();
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
olruebe01
 2006-12-14 17:24
#30282 #30282
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Oh mann...

Ja, diesen Artikel kenne ich und nachdem hatte ich das Script auf geschrieben (wenn auch anscheinend mit einem Fehler)...
Ich hatte dann nur Eure Beiträge so verstanden, dass ich das Deklarieren im BEGIN-Block machen soll (Zitat gwendragon: "Wenn du Variablen nicht am Anfang des SKripts im BEGIN-Block und am Ende im END-Block löscht, dann bleiben sie immer im Speicher.") und somit hatte ich das versucht...

Deine VErsion mit CGI habe ich gerade ausprobiert. Es ändert leider nichts... :-(

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/perl -w

use warnings;
use strict;
use CGI;
my $cgi = CGI->new();
my %FORMDATA = $cgi->Vars();

my @arrnameval = ();
my $querystring =();
my $nam =();
my $val =();
my $namval =();
my $ergebnis =();
my $fehlermeldung =();
$FORMDATA{item}=0;
$FORMDATA{Galerie}="";
$FORMDATA{User}="";


if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
$querystring = $ENV{'QUERY_STRING'};
#print "$querystring<BR>";
}
if ($querystring !~ "QQitemZ") {
@arrnameval = split(/&/, $querystring);
} else {
...
..
\n\n

<!--EDIT|olruebe01|1166110541-->
olruebe01
 2006-12-14 18:10
#30283 #30283
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
So, ich poste jetzt mal das ganze Skript.

Eigentlich kann es doch nur 2 Möglichkeiten geben: Entweder $ergebnis bleibt im Speicher oder $FORMDATA{item} bleibt im Speicher, denn das Ergebnis der DB ist "". Wenn es "" ist, wird aber der korrekt Username und Galeriename ausgegeben ($FORMDATA{User} und $FORMDATA{Galerie} und $FORMDATA{Image})

Das Script...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/perl -w

use warnings;
use strict;
use CGI;
my $cgi = CGI->new();
my %FORMDATA = $cgi->Vars();

my @arrnameval = ();
my $querystring =();
my $nam =();
my $val =();
my $namval =();
my $ergebnis =();
my $fehlermeldung =();
$FORMDATA{item}=0;
$FORMDATA{Galerie}="";
$FORMDATA{User}="";

###### FormularDaten holen, die per Post übertragen wurden...
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
$querystring = $ENV{'QUERY_STRING'};
}
if ($querystring !~ "QQitemZ") {
@arrnameval = split(/&/, $querystring);
} else {
@arrnameval = split(/QQ/, $querystring);
}

foreach $namval (@arrnameval)
{
if ($querystring !~ "QQitemZ") {
($nam, $val) = split(/=/, $namval);} else {
($nam, $val) = split(/Z/, $namval);}
$val =~ tr/+/ /; # replace + with space
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # translate hex values
$FORMDATA{$nam} = $val;
}

my $querystringa;
###### Und den Referrer auslesen....
$querystringa = $ENV{'HTTP_REFERER'};

if ($querystringa !~ "QQitemZ") {
@arrnameval = split(/&/, $querystringa);
} else {
@arrnameval = split(/QQ/, $querystringa);
}

foreach $namval (@arrnameval)
{
if ($querystringa !~ "QQitemZ") {
($nam, $val) = split(/=/, $namval);} else {
($nam, $val) = split(/Z/, $namval);}
$val =~ tr/+/ /; # replace + with space
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORMDATA{$nam} = $val;
}
my $item;
if ($FORMDATA{item} > 1) {
$item ="item=".$item."&";
} else {$item ="";}

###
### Aufrufen nach User A-L und M - Z aufteilen, um zur Lastverteilung die hälfte der Aufrufe von einem anderen Server durchführen zu lassen...
###
my $buchstabe= lc(substr($FORMDATA{User}, 0,1));
if ($buchstabe =~ /[0-9]/) {$buchstabe = "09"}
my $Server;
if ($buchstabe =~ /[a-l]/) {
print "Location: http://www.myDomain6.de/cgi-perl/imagetn.pl?".$item."User=$FORMDATA{User}&Galerie=$FORMDATA{Galerie}&Image=$FORMDATA{Image}\n\n";
exit;
} else {$Server ="www.myDomain4.de";
}
###
### Die User A - L sind nun weg...
###


if (!$FORMDATA{Image} && $FORMDATA{Bild}) { $FORMDATA{Image} = $FORMDATA{Bild}}; # Für alte Anfrage, in denen Formulfeldarname BILD anstelle von IMAGE verwendet wird
print "Content-type: image/jpg\n";

if (!$FORMDATA{item} || $FORMDATA{item} eq 0){ ### wenn der Wert item nicht existiert, erfolgt der Aufruf von einer anderen URL und soll angezeigt werden!!
print "Location: http://$Server/ebay/userdaten/$buchstabe/$FORMDATA{User}/$FORMDATA{Galerie}/$FORMDATA{Image}tn.jpg\n\n";
exit;
}

### Wenn der Wert item doch existiert (= Bildaufruf erfolgt aus einer eBay-Auktion), soll in einer Blacklist überprüft werden,
### ob dieses Bild für diese Auktion (=item) gespert ist.


##Blacklist?
&blacklist;

###
### Mögliche Ausgaben der DB:
### 0 = Alle Bilder gesperrt.
### 6: Alle Bilder über 6 gesperrt (0-5 erlaubt),
### "ok"= ALLE Bilder dürfen angezeigt werden,
### "": Eintrag existiert nicht -> alle Bilder anzeigen
###

if (( $ergebnis eq "ok" || ($FORMDATA{Image} <= $ergebnis && $ergebnis ne "0") || $ergebnis eq "")&& $ergebnis ne "0"){
print "Location: http://$Server/ebay/userdaten/$buchstabe/$FORMDATA{User}/$FORMDATA{Galerie}/$FORMDATA{Image}tn.jpg?$ergebnis\n\n";
exit;
} else {
print "Location: http://www.myDomain3.de/grafics/keinBild.gif\n\n";
exit;
}

### FERTIG






sub blacklist {
use CGI::Carp qw(fatalsToBrowser);
use Fcntl qw(:DEFAULT :flock);
use CGI qw(:standard);
use CGI;
use Apache::DBI();
use DBI;
my $datenbank = "blacklist";
my $datenbankhost = "localhost";
my $datenbankuser = "xxx";
my $datenbankpw = "yyy";

##########################################################
$fehlermeldung = "<li>Fehler bei der Datenbankverbindung aufgetreten. Bitte ueberpruefen Sie die Angaben";
my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") || fehlerausgabe($fehlermeldung);
##########################################################
my $sth = $dbh->prepare("SELECT art FROM `blacklist` WHERE item = '$FORMDATA{item}' and Galerie = '$FORMDATA{Galerie}' ");
$sth->execute or die DBI->errstr;
$ergebnis = $sth->fetchrow_array();
$dbh->disconnect; # DB Connect beenden

}# Ende sub




sub fehlerausgabe{
print $fehlermeldung;
}
<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten



View all threads created 2006-12-14 00:41.