Existenz einer Datei auf einem anderen Server prüfen
Siechfred
- perl
Einen sonnigen Nachmittag allerseits,
ich möchte überprüfen, ob eine Datei auf einem anderen Server vorhanden ist. Soll heißen, wenn jemand in einem Formular z.B. einen Grafik-Link angibt nach dem Schema "http://www.irgendwas.de/grafik.gif", dann suche ich nach einer Möglichkeit, mit Perl zu überprüfen, ob es diese Datei überhaupt gibt. Und hierzu gleich noch eine Frage. Ich möchte mit einem regulären Ausdruck überprüfen, ob am Ende des Links die Zeichenfolgen "gif" oder "jpg" stehen:
if($eingabe != /(gif|jpg)$/) {
# Hinweis, dass nur GIF- oder JPG-Grafiken erlaubt sind
}
Funktioniert das so?
Viele Grüße
Torsten
hi
Einen sonnigen Nachmittag allerseits,
ich möchte überprüfen, ob eine Datei auf einem anderen Server vorhanden ist. Soll heißen, wenn jemand in einem Formular z.B. einen Grafik-Link angibt nach dem Schema "http://www.irgendwas.de/grafik.gif", dann suche ich nach einer Möglichkeit, mit Perl zu überprüfen, ob es diese Datei überhaupt gibt.
Ich würde es mal mit dem Modul LWP::Simple oder LWP::UserAgent versuchen.
http://www.perldoc.com/perl5.8.0/lib/lwpcook.html
Und dann auf is->succes überprüfuen.
Aber musste versuchen, ist bloß ne Idee.
Und hierzu gleich noch eine Frage. Ich möchte mit einem regulären Ausdruck überprüfen, ob am Ende des Links die Zeichenfolgen "gif" oder "jpg" stehen:
if($eingabe != /(gif|jpg)$/) {
# Hinweis, dass nur GIF- oder JPG-Grafiken erlaubt sind
}Funktioniert das so?
Hast es getestet ?
Wenn ja, dann weisst es ja :o)
Ich denke aber schon.
cya
alligator
Einen immer noch sonnigen Nachmittag,
Hast es getestet ?
Wenn ja, dann weisst es ja :o)
Nö, geht nicht :(
Viele Grüße
Torsten
Hook,
und was ist mit
unless ($eingabe =~ /(gif|jpg)$/) {
# Hinweis, dass nur GIF- oder JPG-Grafiken erlaubt sind
}
cya
alligator
Hallo Pirat ;-)
unless ($eingabe =~ /(gif|jpg)$/) {
# Hinweis, dass nur GIF- oder JPG-Grafiken erlaubt sind
}
Hab's jetzt so gelöst, geht
if ($eingabe =~ /[gif|jpg|jpeg]$/g) {
message_win("Format okay");
}
else {
message_win("Falsches Format");
exit(1);
}
Werde mich jetzt mal an das andere Problem heranwagen ....
Viele Grüße
Torsten
Hi!
if ($eingabe =~ /[gif|jpg|jpeg]$/g) {
Wird nicht funktionieren. z.B. wird 'data.bmp' erkannt. Auswahlmöglichkeiten werden nicht mit eckigen Klammern gemacht.
IMHO optimale Lösung ist:
if ($eingabe =~ /(?:gif|jp(?:e)?g)$/g)
Gruß Maik
Hallöle,
IMHO optimale Lösung ist:
if ($eingabe =~ /(?:gif|jp(?:e)?g)$/g)
Danke, jetzt geht es _wirklich_.
Viele Grüße
Torsten
Hi,
Danke, jetzt geht es _wirklich_.
Ist aber immer noch nicht optimal. Ich würde noch zusätzlich mit Image::Size prüfen, ob es ein "echtes" Bild ist. Das ist nämlich recht schwer täuschbar.
Grüße Andres Freund
Hallöle,
Ist aber immer noch nicht optimal. Ich würde noch zusätzlich mit Image::Size prüfen, ob es ein "echtes" Bild ist. Das ist nämlich recht schwer täuschbar.
Das steht mir afaik nicht zur Verfügung.
Viele Grüße
Torsten
N'Abend Sichfried,
Das steht mir afaik nicht zur Verfügung.
Dann installiere es dir doch selber. Es ist ein reines Perl Modul. Daher sollte das kein Problem sein.
Grüße Andres Freund
Hallöle,
Dann installiere es dir doch selber. Es ist ein reines Perl Modul. Daher sollte das kein Problem sein.
Da stoße ich nun wieder an meine Wissensgrenzen. Wo ich es herbekomme, ist mir klar, aber wie installiere ich es auf dem Webserver? Einfach nur mit ins CGI-BIN kopieren? Klingt irgendwie zu einfach.
Viele Grüße
Torsten
N'Abend *zuvertrauensvollzufreund(aka hagen)seiender*
Da stoße ich nun wieder an meine Wissensgrenzen. Wo ich es herbekomme, ist mir klar, aber wie installiere ich es auf dem Webserver? Einfach nur mit ins CGI-BIN kopieren? Klingt irgendwie zu einfach.
Tja, das ist Perl. So einfach wie möglich, so kopliziert wie nötig *g*. Du musst die Datei in das jetztige Verzeichniss hinzufügen, oder das Verzeichniss mittels "use lib()" angeben.
Grüße Andres Freund
Servus nochmal,
Musterkerkennung kanst du so
!~
negieren.
cya
alligator
Hallo,
Und hierzu gleich noch eine Frage. Ich möchte mit einem regulären Ausdruck überprüfen, ob am Ende des Links die Zeichenfolgen "gif" oder "jpg" stehen:
if($eingabe != /(gif|jpg)$/) {
Du vergleichst hier einen String mit einem regulären Ausdruck. Du solltest den regulären Ausdruck anwenden.
http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#anwenden
# Hinweis, dass nur GIF- oder JPG-Grafiken erlaubt sind
}
viele Grüße
Axel
Hallöle,
Du vergleichst hier einen String mit einem regulären Ausdruck. Du solltest den regulären Ausdruck anwenden.
Hab die Lösung gefunden, danke. Allerdings gehen die Probleme jetzt mit LWP::Simple weiter. Folgendes habe ich jetzt weiter versucht:
[...]
use LWP::Simple;
[...]
if( is_success($uri)) {
# mach weiter
}
else
# Abbruch mit Fehlermeldung
}
Gebe ich ein Ziel an, von dem ich ganz genau weiß, dass es existiert, kommt trotzdem der Abbruch mit Fehlermeldung. Woran kann das liegen?
Viele Grüße
Torsten
Hallo,
Allerdings gehen die Probleme jetzt mit LWP::Simple weiter. Folgendes habe ich jetzt weiter versucht:
[...]
use LWP::Simple;
[...]
if( is_success($uri)) {
Wo hast Du die Funktion is_success($uri) her?
http://search.cpan.org/author/GAAS/libwww-perl-5.69/lib/LWP/Simple.pm
besser:
http://search.cpan.org/author/GAAS/libwww-perl-5.69/lib/LWP/UserAgent.pm
viele Grüße
Axel
Hallöle,
ich denke, dass ich die Lösungen gefunden habe, deshalb mal hier die Codeschnipsel, falls jemandem noch etwas auffällt oder eine bessere Lösung bekannt ist:
1. URI auf Existenz prüfen:
[...]
use LWP::UserAgent;
[...]
$new_ua = LWP::UserAgent->new();
$my_request = HTTP::Request->new('HEAD', $uri);
$response = $new_ua->request($my_request);
if( $response->is_success()) {
# die Datei wurde gefunden
}
else {
# die Datei wurde nicht gefunden
}
2. RegEX-Prüfung
if ($uri =~ /(?:gif|jp(?:e)?g)$/g) {
# Format okay
}
else {
# Falsches Format
}
Vielen Dank an alle Helfer.
Viele Grüße
Torsten
Hallo,
ich denke, dass ich die Lösungen gefunden habe, deshalb mal hier die Codeschnipsel, falls jemandem noch etwas auffällt oder eine bessere Lösung bekannt ist:
- URI auf Existenz prüfen:
- RegEX-Prüfung
Ich würde das 2. wegfallen lassen. Wer sagt dann, dass eine JPEG oder GIF Grafik (was ist eigentlich mit PNG, die solltest du auch zulassen) unbdingt eine der von dir genannten Endungen hat?
Da du in 1. ja eh schon den Header anforderst solltest du lieber den zurückgelieferten Content-type prüfen.
Viele Grüße,
Stefan
Hi,
ich denke, dass ich die Lösungen gefunden habe, deshalb mal hier die Codeschnipsel, falls jemandem noch etwas auffällt oder eine bessere Lösung bekannt ist:
- URI auf Existenz prüfen:
- RegEX-Prüfung
Ich würde das 2. wegfallen lassen. Wer sagt dann, dass eine JPEG oder GIF Grafik (was ist eigentlich mit PNG, die solltest du auch zulassen) unbdingt eine der von dir genannten Endungen hat?
Genau - denn es geht ja gar nicht um Dateien (wo Endungen eine Bedeutung haben können), sondern um (http-) Ressourcen, deren Endung keinerlei Bedeutung hat...
Da du in 1. ja eh schon den Header anforderst solltest du lieber den zurückgelieferten Content-type prüfen.
Seh ich auch so, wenn der mit image/ anfängt, sollte es passen, ggf. kann man aber auch noch weiter einschränken.
cu,
Andreas
Hallöle,
Ich würde das 2. wegfallen lassen. Wer sagt dann, dass eine JPEG oder GIF Grafik (was ist eigentlich mit PNG, die solltest du auch zulassen) unbdingt eine der von dir genannten Endungen hat?
Da du in 1. ja eh schon den Header anforderst solltest du lieber den zurückgelieferten Content-type prüfen.
Jepp, darauf hätte ich auch selber kommen können, werde mich gleich mal dransetzen.
Viele Grüße
Torsten
Hallöle,
ich glaube, es geschafft zu haben. Da das Script etwas länger geworden ist, hier der link: http://www.siechfreds-welt.de/cgi-bin/sourceview.pl?fn=checkuri, wer mal schauen möchte.
Ansonsten zwei Tests mit Ressourcen, die es wirklich gibt:
http://www.siechfreds-welt.de/cgi-bin/checkuri.pl?uri=http:%2F%2Fwww.rt211.de%2Ferfurt.jpg
http://www.siechfreds-welt.de/cgi-bin/checkuri.pl?uri=http:%2F%2Fwww.rt211.de%2Findex.shtml
Wer weitere Verbesserungsvorschläge hat, nur zu, so viel wie heute habe ich lange nicht dazu gelernt ;-)
Viele Grüße
Tors*ein klitzekleines bisschen stolz ist*ten
Hi!
if( $header_text =~ /content-type: image/(jpeg|gif|png)/i ) {
Besser:
if ($response->content_type() =~ /image/(?:jpeg|gif|png)\b/i) { # ungetestet
So long
N'abend,
Besser:
if ($response->content_type() =~ /image/(?:jpeg|gif|png)\b/i) { # ungetestet
Funktioniert.
Viele Grüße
Torsten