8

これは機能します:

myphpfile.php:

<?php
header('Content-disposition: attachment; filename=myfile.pdf');
header('Content-type: application/pdf');
readfile('myfile.pdf');
?> 

その php ファイルはここで呼び出され、PDF のダウンロードは正常に機能します。

<a class = "oglasavanje" href = "../../cjenik/myphpfile.php">download</a><br/>

しかし、これは機能しません:

<?php
header('Content-disposition: attachment; filename=myfile.xlsx');
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
readfile('myfile.xlsx');
?>

.pdf ファイルと .xlsx ファイルの両方が同じフォルダーにあります。「ダウンロード」リンクをクリックすると、ダウンロード ウィンドウがポップアップ表示され、ファイルを保存しますが、ファイルを開くことができません。次のエラーが表示されます。

ファイル形式またはファイル拡張子が無効であるため、Excel はファイル 'myfile.xlsx' を開くことができません。ファイルが破損していないこと、およびファイル拡張子がファイルの形式と一致していることを確認してください。

ファイルを手動で開くと、ファイルは正常に開きます (つまり、リンク経由でダウンロードする必要はありません)。

それが重要な場合、私はWAMPを使用しています。

どんな助けでも大歓迎です。

- - 編集 - -

php.net で次のコードを見つけました。

ob_clean();
flush();

したがって、最終的なコードは次のようになり、機能します。

$file = "myfile.xlsx";
header('Content-disposition: attachment; filename='.$file);
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush(); 
readfile($file);

答えてくれてありがとう。

4

4 に答える 4

7

ブラウザに依存するため、多くのことが などの動作を引き起こす可能性がContent-lengthありCache-Controlます

また変更

Content-typeContent-Type

Content-dispositionContent-Disposition

試す

$file = "myfile.xlsx" ;
header('Content-Disposition: attachment; filename=' . $file );
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile('myfile.xlsx');
于 2012-04-17T20:39:32.017 に答える
1

Web ブラウザによっては、ファイル名がピリオドで完全に保存されない場合があります。ファイル名が不完全な場合は、次のヘッダーを試して置き換えることができます。

header('Content-disposition: attachment; filename=myfile.xlsx');

$filename = "myfile.xlsx";
header('Content-Disposition: attachment; filename="' . $filename . '"');
于 2012-04-17T20:28:04.707 に答える
1
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($filename);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile($filename);
return;

この解決策は私にとってはうまくいきますが、ダウンロードしたファイルを開こうとするとエラーが発生します。.pdf ファイルの場合は空です。

于 2016-02-04T15:14:36.640 に答える