PHP Ausgabe Datei-Anhänge mit Header
Nach der Lektüre ein paar Beiträge hier, die ich formuliert diese Funktion ist eine Art ein Mischmasch von ein paar anderen:
function outputFile( $filePath, $fileName, $mimeType = '' ) {
//Setup
$mimeTypes = array(
'pdf' => 'application/pdf',
'txt' => 'text/plain',
'html' => 'text/html',
'exe' => 'application/octet-stream',
'zip' => 'application/zip',
'doc' => 'application/msword',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'gif' => 'image/gif',
'png' => 'image/png',
'jpeg' => 'image/jpg',
'jpg' => 'image/jpg',
'php' => 'text/plain'
);
//Send Headers
//-- next line fixed as per suggestion --
header('Content-Type: ' . $mimeTypes[$mimeType]);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
header('Cache-Control: private');
header('Pragma: private');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
readfile($filePath);
}
Ich habe eine php-Seite (file.php), die soetwas macht (viele andere code entfernt):
//I run this thru a safe function not shown here
$safe_filename = $_GET['filename'];
outputFile ( "/the/file/path/{$safe_filename}",
$safe_filename,
substr($safe_filename, -3) );
Scheint, wie es sollte funktionieren, und es fast nicht, aber ich bin mit folgenden Themen:
- Wenn Ihr eine text-Datei, bin ich immer ein komisches symbol wie der erste Buchstabe im text-Dokument
- Wenn Ihr ein word-doc, es ist beschädigt (vermutlich das gleiche ersten bit oder byte zu werfen Dinge aus).
- Ich nehme an, alle anderen Datei-Typen werden korrupt - haben nicht einmal versucht, Sie
Irgendwelche Ideen auf, was ich falsch mache?
Dank -
UPDATE: geändert Codezeile wie vorgeschlagen - immer noch dasselbe Problem.
Entfernen
Accept-Ranges
. Da braucht es mehr code...InformationsquelleAutor OneNerd | 2009-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich fand es heraus.
Das script oben funktioniert.
Was war passiert, ich hatte eine Reihe von include_once Dateien, und einer von Ihnen hatte eine leere Zeile, die das Problem verursacht.
InformationsquelleAutor OneNerd
Nicht sicher, ob dies die richtige Antwort, aber ich denke, dass Sie bestimmt
werden
InformationsquelleAutor Corey Hart