2016-08-19 34 views
2

xlsxファイルをPHPでダウンロードする必要があります。ファイルはダウンロード中ですが、ファイルを開くと破損したファイルとして表示されます。私はxlsxダウンロード時にファイルが破損しています

Zend Frameworkの使用コントローラ:

$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); 

ビュー: XLSX/XLSファイル以外

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

は(PDF /任意の画像ファイル)を正しくダウンロードしています。

+0

プロパティのロックを解除してみてください。 – Saurabh

+0

バッファサイズを4096に増やしてください。 –

+0

私は完全な権利を持っています(読み書きと実行)。 -rwxrwxrwx – Deepak

答えて

0

問題が見つかりました。コードをダウンロードしている別のコントローラにコードを切り取って貼り付けます。その時、それは働く。

これは、init関数(コントローラとモデルファイルに必要なマッピング)でエラーが発生したために発生します。各ファイルにコメントを付け、1つのファイルでエラーを確認してください。

この回答は役に立ちましたか?

ご意見ありがとうございます。

0

発生する可能性のある問題が複数あり、このエラーが発生します。ただ、これはヘッダもfilesireの問題もないことを確認するために

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

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

:行うには

まず最初は、このようにヘッダを設定することが考えられます。

xlsxファイルでは、しばしばファイルの先頭にBOMがあります。 解凍を使用して問題があるかどうかを簡単にテストする方法があります。 xlsxファイルの解凍を試みてください。このようなものがあれば、これは問題の原因となっているBOMです。

unzip -l your-file.xlsx 

あなたはまた、あなたは、このような出力がある場合は、六角ビューア

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

で確認することができます

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

表示されるはずです。

0000000: ef bb bf 50 4b 

を次に、それはだがBOMの問題(最初の3バイトがefbbbf)。

bom(インターネットはこれに対応しています)を削除するか、ファイルをUTF-8にエンコードすると、このトリックが実行されます。

よろしくお願いします。

+0

私は自分のファイルにヘッダを追加しましたが、downloaadedですが、それでも動作しません。 unzipコマンドを実行すると、警告が表示されません。 16進表示コマンドは0000000として出力を示します:50 4b 03 04 14 PK ... – Deepak

+0

私の推測は間違っています:( – Unex

関連する問題