In Ihrem Code sind einige Dinge zu beachten.
Schreiben Sie zuerst diese Überschriften richtig. Sie werden niemals einen Server senden sehen Content-type:application/pdf
, der Header ist Content-Type: application/pdf
in Abständen mit großgeschriebenen Anfangsbuchstaben usw.
Der Dateiname in Content-Disposition
ist nur der Dateiname, nicht der vollständige Pfad dazu, und obwohl ich nicht weiß, ob er obligatorisch ist oder nicht, wird dieser Name "
nicht eingepackt '
. Auch dein letzter '
fehlt.
Content-Disposition: inline
impliziert, dass die Datei angezeigt und nicht heruntergeladen werden soll. Verwenden Sie attachment
stattdessen.
Stellen Sie außerdem die Dateierweiterung in Großbuchstaben ein, damit sie mit einigen Mobilgeräten kompatibel ist. ( Update : Ich bin mir ziemlich sicher, dass nur Brombeeren dieses Problem hatten, aber die Welt hat sich von diesen entfernt, so dass dies möglicherweise kein Problem mehr darstellt.)
Abgesehen davon sollte Ihr Code eher so aussehen:
<?php
$filename = './pdf/jobs/pdffile.pdf';
$fileinfo = pathinfo($filename);
$sendname = $fileinfo['filename'] . '.' . strtoupper($fileinfo['extension']);
header('Content-Type: application/pdf');
header("Content-Disposition: attachment; filename=\"$sendname\"");
header('Content-Length: ' . filesize($filename));
readfile($filename);
Content-Length
ist optional, aber auch wichtig, wenn der Benutzer den Download-Fortschritt verfolgen und feststellen soll, ob der Download unterbrochen wurde. Wenn Sie es verwenden, müssen Sie jedoch sicherstellen, dass Sie nichts zusammen mit den Dateidaten senden. Stellen Sie sicher, dass vorher <?php
oder nachher absolut nichts ist ?>
, nicht einmal eine leere Zeile.
'
$filename='./pdf/jobs/pdffile.pdf';
und in dieser Zeileheader("Content-Disposition:inline;filename='$filename");
fehlendes Anführungszeichen hinzuzufügen .