ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:ファイルダウンロードで予想外の動作

CSVファイルをダウンロードするために、以下の記事のようなコードを利用して、ファイルをダウンロードできるようにしました。

PHPでファイルをDLさせる際のPHPコード例:phpspot開発日誌

 このコードで僕の環境で試したところ、予定通りのファイルがダウンロードできました。

 

不具合発生

お客さんに試してもらったところ、文字化けしているような変なファイルがダウンロードできたと言われました。

ファイルをもらって確認したところ、予定通りのファイル内容のあとに、HTMLのコードがくっついていました。

 

プログラムは、ダウンロードのコードの後にHTMLのコードが書いてありますが、僕の環境では、現象がが発生していないため、問題がないと考えていました。

 

対処方法

ダウンロードは、readfile()関数がファイルを読み込んで出力バッファに送り終わった時点で処理終了すればいいので、readfile()関数の次にdie()関数を記述しました。

 

僕の環境では起きない理由がよくわかりませんでしたが、ダウンロードは単独のプログラムにするか、PEARのHTTP_Downloadを使うのが安全だとわかりました。

Manual :: HTTP_Download
HTTP_Download ...