GIF-Bild per CGI ausgeben

Hallo,

ich habe hier ein kurzes, eigentlich banales Skript, das bei meinem alten Hoster problemlos lief. Bei meinem neuen Hoster (xtremehosting / Com-Division) dagegen nicht, obwohl andere CGIs problemlos funktionieren. Weiss jemand einen Rat? Achso, die Datei mypic.gif liegt im gleichen Verzeichnis wie das CGI, aber auch testweise nochmal im Wurzelverzeichnis der Domain bzw. im httpdocs der Domain. Macht alles keinen Unterschied, das Bild wird nicht übertragen, Ergebnis im Browser ist jedes Mal das bekannte rote x.

Also, hier kommts:

#!/usr/bin/perl

print „Content-type: image/gif\n\n“;

$file1 = „mypic.gif“;

open (BILD, $file1);
while ($zeile = )
{
print ($zeile);
}
close (BILD);

Hallo,

#!/usr/bin/perl

Pfui, kein ‚use warnings‘ und kein ‚use strict‘. Schäm dich!

print „Content-type: image/gif\n\n“;

$file1 = „mypic.gif“;

open (BILD, $file1);

Keine Fehlermeldungen, wenn das öffnen fehlschlägt?

while ($zeile = )
{
print ($zeile);
}
close (BILD);

Meine Idee: probier mal ein

binmode STDOUT;

.
Wenn das nichts hilft, schreib dein Skript ordentlich:

#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $file1 = "mypic.gif";

open (BILD, $file1) or die "Can't read '$file1': $!";

binmode STDOUT;
while ($zeile = )
 {
 print ($zeile);
 }
close (BILD);

Und dann schau dir die Fehlermeldung an, die der Webserver produziert. Und, wenn möglich, schau ins error.log des Webservers.

BTW brauchst da für diese Aufgabe wirklich ein Skript?

Grüße,
Moritz

Hallo Moritz,

danke erstmal!

Und dann schau dir die Fehlermeldung an, die der Webserver
produziert. Und, wenn möglich, schau ins error.log des
Webservers.

Darin steht:
[error] Global symbol „$zeile“ requires explicit package name

Jetzt bin ich so schlau wie zuvor?

Wie kann es kommen dass das gleiche Skript bei meinem alten Hoster so lief und beim neues jetzt nicht?

BTW brauchst da für diese Aufgabe wirklich ein Skript?

Für diese Aufgabe natürlich nicht, da hast du recht, dieses íst nur ein Teil des ganzen, der Rest funktioniert ja.

Hallo,

Und dann schau dir die Fehlermeldung an, die der Webserver
produziert. Und, wenn möglich, schau ins error.log des
Webservers.

Darin steht:
[error] Global symbol „$zeile“ requires explicit package name

Jetzt bin ich so schlau wie zuvor?

Nein, du weisst mehr: du hast eine Variable $zeile verwendet, und die vorher nicht mit ‚my‘ deklariert. Oder bei der Deklaration einen Syntaxfehler gemacht.
Willst du uns nicht das ganze Skript zur Verfügung stellen? das würde beim debuggen helfen…

Wie kann es kommen dass das gleiche Skript bei meinem alten
Hoster so lief und beim neues jetzt nicht?

Verschiedene Perl-Versionen, verschiedene Pfade, andere Umgebungsvariablen, andere Module installiert…

Grüße,
Moritz

Hallo,

while ($zeile = )

Das muss while (my $zeile = … heissen, sorry,

Grüße,
Moritz

Hallo Moritz

Nein, du weisst mehr: du hast eine Variable $zeile verwendet,
und die vorher nicht mit ‚my‘ deklariert. Oder bei der
Deklaration einen Syntaxfehler gemacht.

Nicht ich, sondern du :smile: Ich hatte dein Skript einfach 1 zu 1 übernommen…

Willst du uns nicht das ganze Skript zur Verfügung stellen?
das würde beim debuggen helfen…

„Das ganze Skript“ ist genau das was du mir geschrieben hattest…

Jetzt bekomme ich jedenfalls die Fehlermeldung „Can’t read ‚mypic.gif‘: No such file or directory“, obwohl die GIF-Datei definitiv dort liegt!

Hallo,

Nein, du weisst mehr: du hast eine Variable $zeile verwendet,
und die vorher nicht mit ‚my‘ deklariert. Oder bei der
Deklaration einen Syntaxfehler gemacht.

Nicht ich, sondern du :smile: Ich hatte dein Skript einfach 1 zu 1
übernommen…

Mea Culpa, mea maximal culpa :wink:.

Jetzt bekomme ich jedenfalls die Fehlermeldung „Can’t read
‚mypic.gif‘: No such file or directory“, obwohl die GIF-Datei
definitiv dort liegt!

Die Frage stellt sich dann, was „dort“ ist :wink:.
Lass dir mal vom Script den absoluten Pfad ausgeben, vielleicht wird es ja in einem ganz anderen Verzeichnis ausgeführt:

#!/usr/bin/perl
use warnings;
use strcit;
print "Content-Type: text/plain\n\n";
print $ENV{PWD}, $/;

(ungetestet :wink:

Grüße,
Moritz

Hallo,

Jetzt bekomme ich jedenfalls die Fehlermeldung „Can’t read
‚mypic.gif‘: No such file or directory“, obwohl die GIF-Datei
definitiv dort liegt!

wenn Linux Server , aufjedenfall mal gucken ob die Rechte für das Bild auch auf Read gesetzt sind . Und wichtig GROSS und kleinschreibung Beachten .

Hallo,

Wie kann es kommen dass das gleiche Skript bei meinem alten
Hoster so lief und beim neues jetzt nicht?

Verschiedene Perl-Versionen, verschiedene Pfade, andere
Umgebungsvariablen, andere Module installiert…

Oder gar ein anderes Betriebsystem z.b.
(windows = ohne rechte und not casesensitiv,
linux = mit rechte und casesensitiv,
/ apple / unix)