Filterproblem bei Perl
Marcus Vieß
- cgi
0 Cheatah0 Christian Kruse0 Tom
Das script soll bei bestimmten Wörtern die es findet bestimmte sachen machen. Mhh bis zu einem Teil funktioniert das ganze.
z.B. scheinen die ersten 3 Filterwörter tatsächlich zu klappern, nur das Ebay Wort scheint nicht zu laufen.
Liegt das daran das das Wort ebay in der $env eingebunden ist ?
also z.B. http://www.ebay.de/cgi-bin/blablabla.html während die anderen immer an ende hängen oder hab ich da grundsätzlich was falsch ?
Er sollte das Wort als Filter quasi mit Wildcard vorne und hinten nehmen, also quasi *.*ebay*.* oder *ebay*.
Kann mir einer helfen was fehlt oder falsch gemacht wird ?
Scriptauszug :
my(@filter) = ('robots.txt','favicon.ico','undefined','ebay');
my($filter) = join('|',@filter);
if(!($ENV{'REFERER_URL'} =~ /($filter)/) && !($ENV{'HTTP_REFERER'} =~ /($filter)/)) {
aktion1
} else { exit;}
gruß,
Marcus
Hi,
z.B. scheinen die ersten 3 Filterwörter tatsächlich zu klappern, nur das Ebay Wort scheint nicht zu laufen.
Du hast Dir natürlich die Werte, die Du da auf Deine Suchwörter hin überprüfst, mal ausgeben lassen. Wie lauten sie?
Liegt das daran das das Wort ebay in der $env eingebunden ist ?
Welches $env? Erstens ist es ein Hash, also %env, zweitens heißt es %ENV. Groß- und Kleinschreibung ist im Universum von entscheidender Bedeutung.
my(@filter)
Warum forcierst Du hier den Listenkontext? Die Klammern sind nicht nötig. In der nächsten Zeile noch weniger, Du hast nicht mal eine Liste.
= ('robots.txt','favicon.ico','undefined','ebay');
Danke für die Singlequotes!
my($filter) = join('|',@filter);
Es ist nicht wirklich sinnvoll, mehrere gleichnamige Variablen im selben Scope zu halten. Wenn Du $filter verwenden möchtest, nenne das Array z.B. @filterliste.
if(!($ENV{'REFERER_URL'} =~ /($filter)/) && !($ENV{'HTTP_REFERER'} =~ /($filter)/)) {
Dir ist bewusst, dass
Zu den Details in Regular Expressions siehe
perldoc perlre
Cheatah
Sowas hatte ich befürchtet.
Jungs erstmal Danke für die Unterstützung.
Aber, ich bin Perlnewbie und hacke mich gerade so langsam rein.
Das ist alles etwas zu Fachchinesisch im moment.
Mit "es läuft nicht" meine ich das ich trotz Filter 'ebay'
die Url
http://cgi.ebay.com/aw-cgi/eBayISAPI.dll?ViewItem&item=1030275113.
nicht gefiltert wird.
als auslesevariable soll $ENV{'REFERER_URL' & $ENV{'HTTP_REFERER'
abgefragt werden.
if(!($ENV{'REFERER_URL'} =~ /($filter)/) && !($ENV{'HTTP_REFERER'} =~ /($filter)/)) {
sollte meines erachtens so funktionieren das eben beide Vars mit dem Filter überprüft werden.
gruß,
Marcus
PS: Hash und Array, der unterschied ist mir noch nicht ganz klar. Aber wie gesagt, ich lerne.
Hoi, <-- sowas nennt man eine Begruessung
z.B. scheinen die ersten 3 Filterwörter tatsächlich zu klappern, nur das Ebay Wort scheint
nicht zu laufen.
Was heisst 'nicht laufen'?
Er sollte das Wort als Filter quasi mit Wildcard vorne und hinten nehmen, also quasi
*.*ebay*.* oder *ebay*.
Du meinst /ebay/?
my(@filter) = ('robots.txt','favicon.ico','undefined','ebay');
my @filter = ('robots\.txt','favicon\.ico','undefined','ebay');
my($filter) = join('|',@filter);
my $filter = join '|', @filter;
Wo genau liegt dein Problem? Was laeuft nicht?
Schau dir mal den Unterschied zwischen ($var) = und $var = an.
Gruesse,
CK
Hallo
my(@filter) = ('robots.txt','favicon.ico','undefined','ebay');
my @filter = ('robots\.txt','favicon\.ico','undefined','ebay');
Bitte was??
Der Inhalt von Singlequotes wird _nicht_ interpoliert, somit wirst du mit \ keine Freude haben.
Hoi,
my(@filter) = ('robots.txt','favicon.ico','undefined','ebay');
my @filter = ('robots\.txt','favicon\.ico','undefined','ebay');
Bitte was??
Der Inhalt von Singlequotes wird _nicht_ interpoliert, somit wirst du mit \ keine Freude haben.
perldoc perlop
Der Backslash _muss_ mit \ gequotet werden. Probiers aus.
Gruesse,
CK