web-dev-qa-db-ja.com

PHP xlsxヘッダー

だからこれはうまくいく:

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

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

7
GTCrais

ブラウザによっては、Content-lengthCache-Controlなどの多くのことが原因で動作する可能性があります。

また変更

Content-typeからContent-Type

Content-dispositionからContent-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');
7
Baba
$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ファイルの場合は空です。

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

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

$filename = "myfile.xlsx";
header('Content-Disposition: attachment; filename="' . $filename . '"');
1
Scryptronic