bilder werden nicht angezeigt

Alles, was Perl betrifft, kann hier besprochen werden.

bilder werden nicht angezeigt

Postby Alisagt » 16. November 2004 15:10

Hi

ich versuch mich seit einiger zeit mit perl/cgi-programmierung, klappt auch ganz gut :D
mein einziges problem (bisher) ist es, dass mir keine bilder angezeigt werden die ich im .pl script angegeben habe

z.B. (sehr billiges beispiel)
Code: Select all
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html><head></head>\n";
print "<body>";
print "<p><img src=dhcp.jpg></p>";
print "</body></html>";


zeigt er mir nur das symbol mit dem roten x und in der error.log steht
[error] Unrecognized character \\xFF at C:/apachefriends/xampp/htdocs/modperl/dhcp.JPG line 1.\n


access.log
127.0.0.1 - - "GET /perl/test.pl HTTP/1.1" 200 134
127.0.0.1 - - "GET /perl/dhcp.jpg HTTP/1.1" 500 678


wie man vlt erkennt liegt das bild wie auch das script im modperl verzeichnis...

für einen tip bzw. ne lösung wäre ich dankbar :)

bye

software: xampp 1.4.9 mit mod_perl 1.4.9, winxp

PS: forum hab ich durchsucht aber irgendwie nichts brauchbares gefunden...
Alisagt
 
Posts: 2
Joined: 16. November 2004 14:58

Postby Wiedmann » 16. November 2004 15:54

Im Perl/cgi Verzeichnis dürfen, wie der Name es schon sagt, nur die Scripte liegen.

Und der Versuch, den Inhalt der Bilddatei als Script zu interpretieren, scheitert demnach.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Trennung von cgi und html Verzeichnis

Postby Mathias Wilhelm » 23. November 2004 13:29

Salut,
in der Hoffnung, Dein Problem richtig verstanden zu haben:
Du hast ein script in c:\apachefriends\xampp\cgi-bin\perl namens test.pl und ein bild namens dhcp.jpg im gleichen Verzeichnis.

Das Problem liegt dann darin, dass der apache server das genannte bild in dem Aufruf <img src=dhcp.jpg> im html Verzeichnisbaum zu finden sucht. Da Du keinen Pfad angegeben hast, versucht der server noch im Standardverzeichnis (wie im apache config angegeben) zu finden und gibt dann auf.
Als Lösung musst Du das Bild in ein Verzeichnis im html Baum verschieben. Am besten ist es, dabei die vollständige URL zum Bild anzugeben. Ich verwende dabei die Regel, dass Bilder eines Scriptes xxx.pl immer im Verzeichnis xxx\img unter dem htdocs Verzeichnis liegen. In Deinem Fall liegt dann das Bild unter c:\apachefriends\xampp\htdocs\test\img und die URL im <img> tag sollte so aussehen: <img src="http://localhost/test/img/dhcp.jpg">

Als Verfikation kannst Du bei Bildern immer testen, ob Du diese URL auch im normalen Browserfenster siehst. Dann erkennst Du, ob der link korrekt aufgelöst wird.

Ich hoffe, das hat geholfen,
Mathias
Mathias Wilhelm
 
Posts: 10
Joined: 24. September 2004 12:07
Location: Bad Bellingen

Postby Alisagt » 24. November 2004 08:14

morgen

also nochmal zum besseren verständnis.
das mit dem perl/cgi verzeichnis kam mir auch schon in den sinn, weswegen ich auch ein extra/neues verzeichnis in die perl.conf eingetragen habe z.B. "c:\apachefriends\xampp\htdocs\lala"

Code: Select all
<Directory "c:\apachefriends\xampp\htdocs\lala">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
</Directory>


wenn ich nun die *.pl datei und das bild in dieses verzeichnis packe, kriege ich immernoch die selbe fehlermeldung
was die pfadangabe angeht <img src=dhcp.jpg> sollte eigentlich das bild anzeigen, da bei dieser pfadangabe das bild nur im eigenen verzeichnis(wo auch die *.pl datei lieg) gesucht wird, ausserdem würde dann ja was in der error.log stehen, wenn er das bild nicht finden würde

komischerweise wenn ich anstelle des verzeichnis über die dateiendung das ??perl-modul?? zuweise also
Code: Select all
<Files *.pl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
</Files>

werden bilder angezeigt, also muss irgendwie was mit den optionen beim festlegen von verzeichnissen nicht stimmen?
Alisagt
 
Posts: 2
Joined: 16. November 2004 14:58

Trennung von cgi und html Verzeichnis

Postby Mathias Wilhelm » 24. November 2004 11:30

Salut,
ich denke, das Problem liegt darin, dass Du mit dem <Directory> Eintrag festlegst, dass alle files in diesem Verzeichnis als perl scripte anzusehen sind. Das würde die Fehlermeldung erklären, da ein jpg File ja mit FF D8 FF E0 beginnt und das für den Perl Interpreter nicht nach einer sinnvolen Shebang Zeile aussieht.
Mit Deinem Files Eintrag hast Du dann diese Spezifikation aif *.pl beschränkt, so dass das jpg file wieder normal interpretiert wird.

Dennoch kann ich Dir nur empfehlen, Bilder und fixe HTML Seiten im htdocs Verzeichnisbaum abzulegen, Scripte in den cgi-bin Baum und die links so explizit wie möglich auszuformulieren.

Ciao, Mathias
Mathias Wilhelm
 
Posts: 10
Joined: 24. September 2004 12:07
Location: Bad Bellingen

Postby deepsurfer » 25. November 2004 14:53

auf GROSS und kleinschreibung achten.
Unix arbeitet case sensitive und somit sollte im script auch genau der selbe Name stehen wie das bild ist und nicht wie zu lesen

im script -> dhcp.jpg
und im Verzeichnis -> dhcp.JPG



chirio
Deep
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby ltd-uhura » 30. December 2004 14:11

hallo, ich habe wohl dasselbe problem wie alisagt:
ich habe ein ganz einfaches perl-script geschrieben:

#!C.\xampp\perl\bin\perl.exe

use GD;
my $testbild;
open(BILD, "0.png") or die ("fehler beim einlesen");
binmode(BILD);
$testbild=GD::Image->newFromPng(BILD);
close BILD;
print "Content-Type: text/html\n\n";
print "<img src=\"http://localhost/andrea/img/0.png\">";

dieses liegt im verzeichnis cgi-bin. das bild 0.png liegt im verzeichnis htdocs/andrea/img

und wird aufgerufen von einer html-seite, ebenfalls unter htdocs gespeichert:

<html>
<head>
<title>xyz</title>
</head>
<body>
<img src="http://localhost/cgi-bin/countertest.pl" />
</body>
</html>

leider funzt das nicht und ich bekomme nur das img-icon mit rotem kreuz angezeigt, wenn ich die html-seite aufrufe. wenn ich das perl-script in der eingabeaufforderung laufen lasse, wird kein fehler angezeigt.
ich bin für jede hilfe super-dankbar, da ich schon seit zwei tagen im internet nach einer lösung für dieses (grundsätzliche) problem suche

gruss
andrea
ltd-uhura
 
Posts: 4
Joined: 30. December 2004 13:52

Postby deepsurfer » 30. December 2004 14:22

open(BILD, "0.png")


bin mir jetzt nicht sicher...

aber hier müsste hier nicht der ganze pfad zum Bild rein, denn sonst kann er es ja nicht öffnen (in den speicher legen)

z.b.
Code: Select all
open(BILD, ".././andrea/img/0.png")



.././ relative zuweisung aus cgi-bin zum htdocs verzeichnis



chirio
Deep
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby ltd-uhura » 02. January 2005 12:57

hallo,
das war leider nicht das problem...hab jetzt den relativen pfad und den absoluten (http://localhost/andrea/img/0.png) ausprobiert.
hat vielleicht jemand noch ne andere idee? könnte das ne einstellung in der conf sein, die mir fehlt, o. ä.?
viele grüße
andrea
ltd-uhura
 
Posts: 4
Joined: 30. December 2004 13:52

Postby Wiedmann » 02. January 2005 14:07

Hi Andrea,

mal abgesehen davon, das die 1. sechs Zeilen grad eh nichts bewirken...

<img src="http://localhost/cgi-bin/countertest.pl" />

Hier sagst du dem Browser, dass er ein Bild von der angegeben Quelle laden soll. In diesem Fall ist das Ziel dann ein Perl-Script, welches eine PNG-Grafik zurückliefert.

print "Content-Type: text/html\n\n";
print "<img src=\"http://localhost/andrea/img/0.png\">";

Hier erzeugt dieses Perl-Skript eine HTML-Datei wo ein Bild inline geladen wird (der Browser lädt das Bild zusammen mit dem HTML und zeigt es an der Stelle an wo es referenziert wird... Ist aber hier das einzigste HTML-ag).

Ergo:
Der Versuch im HTML wiederum eine HTML-Datei als Bild zu referenzieren wird ein Browser dann mit einem roten X (Bild nicht gefunden) quittieren. --> Dein Script muss eine PNG-Grafik zurückliefern und nicht HTML.

Zumindest das Script, nur mit den letzten beiden Zeilen (+ SheBang), wird laufen, wenn du es direkt aufrufst: "http://localhost/cgi-bin/countertest.pl".

(Bei den GD-Funktionen kann ich dir ansonsten nicht helfen, da ich bei mir kein GD installiert habe)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby ltd-uhura » 04. January 2005 13:56

hallo,
also erst mal vielen dank für die prompten antworten.
ansonsten verzweifele ich hier aber nach wie vor.....
Zumindest das Script, nur mit den letzten beiden Zeilen (+ SheBang), wird laufen, wenn du es direkt aufrufst: "http://localhost/cgi-bin/countertest.pl".
.
meinst du mit 'direkt aufrufen', aus html aufrufen? das hab ich grad versucht (nur die letzten beiden zeilen+shebang), klappt aber nicht. hab auch den content-type mal auf image/png gesetzt klappt aber auch nicht.
es muss doch gehen, ganz einfach aus html ein perl-script aufzurufen, das einem in die bestehende html-seite ein bild einfügt....
gruss
andrea
ltd-uhura
 
Posts: 4
Joined: 30. December 2004 13:52

Postby Wiedmann » 04. January 2005 14:40

meinst du mit 'direkt aufrufen', aus html aufrufen?

Im Browser http://localhost/cgi-bin/countertest.pl eingeben --> halt direkt aufrufen *g*

es muss doch gehen, ganz einfach aus html ein perl-script aufzurufen, das einem in die bestehende html-seite ein bild einfügt....

Yo. aber wie schon gesagt nicht bei deinem Code. Der erzeugt ja im Moment reines HTML.

hab auch den content-type mal auf image/png gesetzt klappt aber auch nicht.

Siehe oben. Solange dein Code eigentlich HTML erzeugt, hilft dir auch ein anderer Content-Type nicht.

Aber das ist der richtige Weg. Du willst ja das dein Scipt "image/png" ausgibt. Es darf also keinen HTML-Link auf ein vorhandes Bild ausgeben, sondern es muss den binären Inhalt der Bilddatei ausgeben (oder analog dazu was man mit GD erzeugt hat).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby ltd-uhura » 04. January 2005 15:02

Du willst ja das dein Scipt "image/png" ausgibt. Es darf also keinen HTML-Link auf ein vorhandes Bild ausgeben, sondern es muss den binären Inhalt der Bilddatei ausgeben (oder analog dazu was man mit GD erzeugt hat)

ja ok, aber wie bitte tut es das???
ltd-uhura
 
Posts: 4
Joined: 30. December 2004 13:52


Return to Perl

Who is online

Users browsing this forum: No registered users and 37 guests