richtige Pfadangabe für header()

Arndtinho

Erfahrenes Mitglied
Hallo,

ich möchte, dass ein User, wenn er auf einen bestimmten Button klickt, ein PDF sich anschauen oder downloaden kann. Das wollte ich so realisieren:
PHP:
$sPDFPath = "/path/to/file/"; 
$sPDFFile = "cst_".$aCst["cst_number"].".pdf";
	
if (isset($_POST["cmdPDF"])) {
		
	header('Content-type: application/pdf');
	header('Content-Disposition: attachment; filename="'.$sPDFPath .$sPDFFile .'"');
}
Der entsprechende Speichern/Öffnen-Dialog wird mir zwar angezeigt aber aus
Code:
/path/to/file/
wird
Code:
_path_to_file_
Was habe ich vergessen oder kann ich das nicht so realsieren?

Gruß
Arndtinho
 
Filename ist, wie die Bezeichnung schon ausdrückt, der Dateiname, den die PDF angeblich besitzt, und nicht der Pfad zu ihr. Da nun eine Pfadangabe transportieren zu wollen, ist also entsprechend eher ungünstig - Der Client wandelt es wohl automatisch um, um Konflikte und Probleme zu vermeiden ;)
 
Mhh, demnach müsste ja aber folgendes funktionieren:
PHP:
$sPDFPath = "/path/to/file/"; 
$sPDFFile = "cst_".$aCst["cst_number"].".pdf";
    
if (isset($_POST["cmdPDF"])) {
        
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="'.$sPDFFile.'"');
    readfile($sPDFPath .$sPDFFile);
}
Oder nicht? Wie kann ich dem User denn sonst noch das PDF zur Verfügung stellen?

Gruß
Arndtinho
 
Das ist vollkommen legitim. Deine anfängliche Frage bezog sich auf das
PHP:
header('Content-Disposition: attachment; filename="'.$sPDFPath .$sPDFFile .'"');
, welches du ja nun korrigiert hast. Möchtest du die Orderhirarchie auch nach dem Download ersichtlich machen, könnte das zB via folgendem Code passieren:
PHP:
header('Content-Disposition: attachment; filename="' . str_replace('/', ' - ', "{$sPDFPath}{$sPDFFile}") .'"');
Das ersetzt die Slashes durch freistehende Striche (reine Formsache).
 
Das passt irgendwie immer noch nicht.
Ich bekomme das richtige File angezeigt und wenn ich dann auf "Öffnen" klicke, erhalte ich den Fehler:
Code:
Diese Datei ist beschädigt und kann nicht repariert werden.
Öffne ich die Datei normal, also einfach per Doppelklick, dann wird sie ganz normal geöffnet.
Hast Du da zufällig ein Tut irgendwo?

Gruß
Arndtinho
 
An sich ist an den bisherigen Sachen nichts falsch.

Eventuell sollte noch die Dateigröße mit übergeben werden als Präventivmaßnahme vor "unvollständigen" Downloads, wie es höchstwahrscheinlich bei dir der Fall ist.
PHP:
header('Content-Length: ' . filesize($sPDFPath . $sPDFFile));
 
Danke Dir erstmal.
Der Fehler kommt immernoch. Ich werde mal noch ein wenig das WWW befragen.
Falls Du noch eine Idee hast, würde ich mich freuen, wenn Du mir Bescheid gibst.

[EDIT]Sehr seltsam, jetzt funktioniert es. Danke Dir.[/EDIT]

Viele Grüße
Arndtinho
 
Zuletzt bearbeitet:
Du musst darauf achten, dass außer dem Dateiinhalt nichts weiter ausgegeben wird. Auch ein einziges Leer- oder Zeilenumbruchzeichen kann dazu führen, dass die Daten korrupt sind.
 
Zurück