2016-08-19 3 views
2

beschädigt Ich muss XLSX-Datei in PHP herunterladen. Die Datei wird heruntergeladen, aber wenn ich sie öffne, wird sie als beschädigte Datei angezeigt. Ich habe Zend Frameworkxlsx Datei ist beim Download in PHP

Controller:

$fullPath = '/opt/bitnami/lampstack-5.4.36-0/apps/projects/ProjectName/File_Name.xlsx'; 

if ($fd = fopen ($fullPath, "r")) 
{ 
    $fsize = filesize($fullPath); 
    $path_parts = pathinfo($fullPath); 
    $ext = strtolower($path_parts["extension"]);    

    header("Content-type: application/xlsx"); 
    header("Content-Disposition: attachment;filename=\"".$path_parts["basename"]."\""); 
    header("Content-length: $fsize"); 
    header("Cache-control: private"); 

    while(!feof($fd)) 
    { 
    $buffer = fread($fd, 2048); 
    echo $buffer;//To display the file content while downloaded. 
    } 
    } 
    fclose ($fd); 

Ausblick:

<?php echo $this->buffer; ?> 

Anders als xlsx/xls-Datei heruntergeladen wird korrekt (PDF/jede Bilddatei).

+0

Versuchen Sie, es von den Eigenschaften zu entriegeln. – Saurabh

+0

Versuchen Sie, die Puffergröße auf 4096 zu erhöhen –

+0

Ich habe volle Rechte auf Datei (lesen/schreiben und ausführen). -rwxrwxrwx – Deepak

Antwort

0

Ich habe das Problem gefunden. Ich schneide und füge den Code in separaten Controller, der nur Code herunterladen. In dieser Zeit funktioniert es.

Es wird verursacht, weil ein Fehler in der Init-Funktion auftritt (Mapping benötigte Controller- und Modelldateien). Kommentiere jede Datei und überprüfe und finde den Fehler in einer Datei.

Hoffnung diese Antwort jemand

Danke für Ihren Kommentar helfen.

0

Es gibt mehrere Probleme, die auftreten können und zu diesem Fehler führen.

Das erste, was zu tun ist, wahrscheinlich Header wie folgt festgelegt:

header('Content-Length: ' . filesize('./uploads/resources/courses/' . $filename));

und

header('Content-Transfer-Encoding: binary'); 

Nur um sicherzugehen das ist weder ein Header noch ein filesire Problem.

Oft mit Xlsx-Datei haben Sie eine Stückliste am Anfang der Datei. Es gibt eine sehr einfache Möglichkeit zu testen, ob es das Problem ist, mit Unzip zu entschlüsseln. Versuchen Sie, Ihre xlsx-Datei zu entpacken, und wenn Sie so etwas haben, dann ist dies die BOM, die das Problem verursacht.

unzip -l your-file.xlsx 

Sie sollten sehen,

warning file: 3 extra bytes at beginning or within zipfile. 

Sie auch

head -c5 your-file.xlsx | xxd -g 1 

mit dem Hex-Viewer überprüfen Wenn Sie eine Ausgabe wie folgt haben:

0000000: ef bb bf 50 4b 

Dann ist es ein BOM-Problem (beachten Sie die 3 ersten Byte efbbbf).

Entfernen der Bom (Internet ist voll von Lösung für diese), oder die Datei in UTF-8 Codierung sollte den Trick tun.

Ich hoffe, es hat dir geholfen.

+0

Ich habe Header in meiner Datei hinzugefügt und heruntergeladen, aber es funktioniert immer noch nicht. Ich führe den Befehl unzip aus, es wird keine Warnung angezeigt. Hex Viewer-Befehl zeigt Ausgabe als 0000000: 50 4b 03 04 14 PK ... – Deepak

+0

Meine Vermutungen sind falsch dann :( – Unex