2018年10月05日に初出の投稿

Last modified: 2018-10-05

添付画像

今週は某案件でデータの管理画面を作っていた。四種類のデータがあって、それぞれ別の JSON ファイルで扱い、番組の公式サイトや他のサイトでもデータを共有するとのことだ。JSON ファイルとして出力するときに気を付けたいのは、JavaScript のプログラマの多くは配列形式のデータを並べるときに「最終項」へカンマを付けてもエラーとならないため、データを出力するルーチンで単純に "配列データ," を繰り返すことがあるが、JSON では最終項にカンマを付けるとエラーになる。これは、ECMAScript 5 (ECMA-262) で導入された "trailing comma"(Annex D) という記法に、古い ECMA の規格にしか準拠していない JSON の規格が未対応だからだ。

それから、あまり機会がないので久しぶりに実装すると忘れていて困るのが、ファイルをダウンロードするときのヘッダだ。JSON ファイルとして出力する場合には、実ファイルを './result/' . $filename に出力して readfile() するのが定番の処理の一つだが、ダウンロードを同時に実行する場合は、Content-Disposition と Content-Type: application/octet-stream の二つが必要だ。

header( "Content-Type: application/json" );

header( "Content-Disposition: attachment; filename=" . $filename );

header( "Content-Type: application/octet-stream; name=" . $filename );

readfile( './result/' . $filename );

PHP でファイルのダウンロードをさせる解説を書いているページの多くは、どちらかしか書いていない。しかし、それだと指定したファイル名ではなく、ダウンロード処理を実行しているスクリプトのファイル名でダウンロードされてしまうのだ。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook