Verlinkung auf ein pdf mittels eines CGI Linkes, ERROR404

dark_ghost

Erfahrenes Mitglied
Hallo zusammen,

schon wieder beschäftigt mich ein brisantes Problem :eek: mit dem ich mich nun an euch wenden möchte.

Rechnugnsnummern, die Ausgegeben werden, werden mit dem kompletten Dateinamen angezeigt, der auf einer Variablen gespeichert ist ($line) diese Variable setze ich auch im Attribut a unter href ein.

Bei den Rechnungen handelt es sich um PDF Dateien.

Code:
print $cgi->header(),
$cgi->start_html('|-Verarbeitung-|'),
$cgi->b("$hitcounter) "),
$cgi->a({-href =>"../archiv/$line"}, "$line<br>"),
$cgi->end_html();

Die erzeugte HTML Seite gibt das auch richtig aus, also es wird ein Link erzeugt.
Nur bei Klick auf den Link erhalte ich folgende Meldung:

Objekt nicht gefunden ! ERROR 404

das Script liegt im Ordner cgi-bin und die Rechnungen eins drunter im Ordner Archiv.
Rechte des Ordners Archiv >> drwxr-xr-x
Rechte der Rechnungen >> -r-xr-xr-x

Habt ihr eine Ahnung was ich falsch mache?
 
Das einzigste was da dann wohl noch schief laufen könnte (vorrausgesetzt das die relativen Pfadangaben auch wirklich funktionieren!) das in $line eben der Dateinamen nicht richtig drinsteht.

Was ist $line denn? Eine Zeile einer Datei? Evtl. hängt da noch ein Zeilenendezeichen dran? Das wäre dann am einfachsten mit chomp() zu entfernen. Am besten einfach mal $line ausgeben mit irgendwelchen begrenzenden Zeichen, damit du genau siehst, was tatsächlich drin steht.

Um in nem CGI-Script auf die Schnelle den Inhalt einer Variable zu prüfen, um sicher zu gehen mache ich i.d.R. sowas:

Code:
print "<pre>[$variable]</pre>";

Durch die umgebenen pre-Tags werden formatierungseigenschaften wie Newlines und zusätzliche Leerzeichen 1:1 im HTML angezeigt. Und mit den [] findest du auch führende/nachgestellt Leerzeichen/Zeilenvorschübe. Kannst natürlich auch andere Zeichen verwenden, wichtig ist halt nur das du exakt bestimmen kannst wo der Anfang und wo das Ende ist, aber das dürft einleuchten ;)

Achso, sofern es sich um einen Linux rechner Handelt, und du die Dateinamen der PDF-Dateien evtl. in irgend einer Form für den Benutzer schön herrichtest, kann es natürlich auch sein, dass du damit den Dateinamen so veränerst, dass er nichtmehr gefunden werden kann. Grade unter Linux schliest das eben auch Groß-/Kleinschreibung mit ein, die unter Windows ohne Probleme funktionieren würde.
 
Hi there,

bei dem Rechner handelt es sich um einen Linux(Suse10.0) Rechner auf dem Apache2 läuft.
Die Rechnungen liegen in folgendem Format vor:
0099893-13540.79303#99893#7303274#416528#20051220#RG#.pdf

Ich öffne das Verzeichnis Archiv und lese es Zeilenweise ein, dabei wird die aktuell eingelesene Zeile immer auf $line gespeichert. Es folgt ein Suchmuster und überprüft ob die gewünschten Kriterien in dem Dateinamen der gerade auf $line steht auch vorkommen, wenn ja dann schreibt er die Datei raus, wenn nicht wird weiter gesucht.
Das funktioniert auch alles, nur eben der Link auf die Datei passt nicht.

Der Pfad zur Datei ist gleich der Ausgabe, da ich ja beide male $line verwende.

Hoffe das hilft weiter.

Greetz
Andreas
 
Hallo,

habe den 'Fehler' gefunden. Es lag an dem Dateinamen !
Linux kann anscheinend mit den # im Dateinamen nichts anfangen. Habe einfach mal eine Datei kopiert und die # rausgelöscht, dann gings.

Danke für deine schnelle Antwort.
Gruß
Andreas
 
Zurück