質問: 'output.xlsx';//ダウンロードさせるファイル名 header("Content-Type: application/octet-stream");//ダウンロードの指示 header("Content-Disposition: attachment; filename=$file_name");//ダウンロードするファイル名 header("Content-Length:".filesize($file_path));//ダウンロードするファイルのサイズ ob_end_clean();//ファイル破損エラー防止 readfile(dirname(__FILE__) . '/./' . $file_path);//ダウンロード ``` saveしたファイル 正常に見れるやつ ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/52d5725b231e05cc488152c7587dd956.jpeg) readfileしたやつ 開こうとすると Excelファイル’○○○xlsx’を開くことができません。ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください。 と表示される。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/26478b4becc85c23b602f6a088e45f81.jpeg) どうしたら良いか知恵を貸してください。 宜しくお願いします。 OS:win10 Excel:2013 --- readfile(dirname(*FILE*) . '/./' . $file_path);//ダウンロード こちらが問題でした。 現在のディレクトリを2回表示させるという意味わからないことしてました。 これでOK。 readfile($file_path); これでファイルは読み込めるようになりましたがまだ問題が残っていました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c50b8234ee70a9641b93369bc74e172c.jpeg) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c10b8bb447f37169f0605eb05daf34ee.jpeg) ちゃんとエラーなく表示させたいのですが 分かる方いらっしゃいましたら、教えていただけるとありがたいです。 【追記】 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d66be5285cd3f2fcae19c6b9a79d3dc9.jpeg) ファイル名は同じです。 サイズが若干違います... 【追記】 問題のあるファイルを2つのエディタで開いてみましたがこれといったものがなさそうです... ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/3aec044eeab718c7aa92b25299f0c8be.jpeg) ユーザー向けにポップアップで表示させたいということです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7e57577f2436a5f76981a487cf6bac21.jpeg)
回答: PHPExcelは、ファイルを作らずに直接ダウンロードもできるようです。 ``` // Excel2007形式で出力する $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $writer->save('php://output'); /*ここからは一旦コメントアウト //↑ここまでは順調 //↓ここからがなんかおかしい $file_path = dirname(__FILE__) . 'output.xlsx';//ダウンロードさせるファイルのパス $file_name = 'output.xlsx';//ダウンロードさせるファイル名 header("Content-Type: application/octet-stream");//ダウンロードの指示 header("Content-Disposition: attachment; filename=$file_name");//ダウンロードするファイル名 header("Content-Length:".filesize($file_path));//ダウンロードするファイルのサイズ ob_end_clean();//ファイル破損エラー防止 readfile(dirname(__FILE__) . '/./' . $file_path);//ダウンロード */ ```