header("Content-Type: application/octet-stream");
は
header("Content-Type: text/csv; charset=Shift_JIS ");
http://php.eweb-design.com/0303_dl.php
参考にしてみてください。
▽3
●
a-kuma3 ●150ポイント ベストアンサー |
質問の文面で、気になっていたのですが、Webブラウザを使うのではなく、php のスクリプトを直接実行しているのですよね。
Web上で参考にした以下のプログラムで上記を実現したいと考えておりますが、コマンドプロンプトで実行するも、SELECT結果が表示されるのみで、
ご教示頂いた内容のように、スクリプトを変更し再度実行してみたのですが、
やはり、コマンドプロンプト状にselect結果が表示されるのみで、
保存されないようです。
http のヘッダは、Webブラウザのような http のプロトコルを解釈するクライアントプログラムが解釈して、その指示に従って実行するものです。
サーバ側では、php のような CGI は決められたヘッダを含めて標準出力(コマンドプロンプトで言う画面への表示)へ内容を出力し、Apache のような http のサーバプログラムがネットワークを介して、Webブラウザのようなクライアントプログラムへ渡します。
php を直接 実行した場合には、画面上(標準出力)に結果を出すだけなので、Content-Type や Content-Disposition のようなヘッダも含めて、その内容を表示するだけです。
コマンドプロンプトには、http プロトコルのヘッダを解釈するような機能はないので、Content-Disposition での指定は効きません。
ファイルに保存するとしたら、コマンドプロンプトが解釈できなヘッダの出力を省略したうえで、リダイレクトの機能を使って保存することになります。
スクリプトは、こんな感じ。
<?php // http ヘッダの出力はしない // header("Content-Type: application/octet-stream"); // header("Content-Disposition: attachment; filename=hoge.csv"); $db_host = "dbinstance.hoge.fuga.rds.amazonaws.com:3306"; $db_user = "dbuser"; $db_passwd = "password"; $db_name = "testdb"; ...
コマンドの実行は、こんな感じで、> に続けて保存したいファイル名を書きます。
% php スクリプト.php > hoge.csv