アップロードと比較するとタイトルは釣り気味なのですが、ダウンロードにまつわるパターンをまとめます。 ふつうのダウンロード アップロードほど考えなきゃいけないことは多くないですが、ハマりポイントはいくつかあります。 ファイル名 何も対策せず日本語をファイル名にすると、当然のように化けます。
アップロードと比較するとタイトルは釣り気味なのですが、ダウンロードにまつわるパターンをまとめます。 ふつうのダウンロード アップロードほど考えなきゃいけないことは多くないですが、ハマりポイントはいくつかあります。 ファイル名 何も対策せず日本語をファイル名にすると、当然のように化けます。
ファイルをダウンロードするときのヘッダーは次のようになります。 header('Last-Modified: '. gmdate('D, d M Y H:i:s') .' GMT'); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file_path)); [参考記事] SSL(HTTPS)でファイルのダウンロードができない場合 ダウンロード時の
とあるダウンロード機能で、Firefox だと文字化けするという現象の調査依頼。IE だと日本語を含むファイル名も意図した名前でダウンロードできが、Firefox だとファイル名が文字化けしてしまう。 どうやら、Content-Disposition レスポンスヘッダについたファイル名 (attachment; filename) のエンコーディングの解釈が IE と Firefox で違うらしい。EUC-JP のページにダウンロードするリンクがあるとき、Firefox は filename の値が EUC-JP で書かれていると判断し、IE は Shift-JIS で書かれていると判断する模様。 問題となったアプリでは、filename の値を明示的に Shift-JIS に変換していたので、IE で O.K.、Firefox で NG となった。 とりあえず該当アプリでは、USER_A
ファイルを作成してダウンロードする方法と、ファイルを作成せずにダウンロードする方法がある。 「ファイル作成してダウンロード」は、既に用意されているファイルをダウンロードする場合や、PDFやエクセルなどを一旦編集してダウンロードする場合に適していると思う。 「ファイルを作成せずにダウンロード」は、CSVなどテキスト系のファイルのダウンロードに適していると思う。 ※CakePHPのバージョン2.3以降 ファイルを作成してダウンロード $this->autoRender = false; $this->response->file( //ファイルパス APP.'webroot/files/foo.csv', [ //ダウンロードしたときのファイル名。省略すれば元のファイル名。 'name'=>'bar.csv', //これは必須 'download'=>true, ] ); //レイアウトを使用
このサイトは以下の環境で 動作しています。 Apache/2.4.52 (Ubuntu) PHP version 8.1.2-1ubuntu2.15 TOP -> 作る -- ファイルをダウンロードさせる。 -- ただ単にtxt・xls・doc・PDFなどのドキュメントにリンクを張るとブラウザ内で表示することがありますが、 開かずにファイルをダウンロードさせたい時があります。 以下の様にする事で、ブラウザ内で開かずダウンロードさせることができます。 -- download.php -- <?php // ダウンロードさせるファイル名 $tmp_file = "test.txt"; $j_file = "テスト.txt"; $j_file = mb_convert_encoding($j_file, "SJIS", "UTF8"); // ヘッダ header("Content-Type:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く