|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
Oracle関数(Ora_XXXX関数)は推奨されない関数となっています。PDO関数が使えない・使わない場合は、OCI8関数(現在のOracle関数)を使いましょう。
メンテナンス画面などで検索結果をCSV形式でダウンロードさせる、という用件は意外とあるかと思います。ここでは、以下の2つのサンプルを作ってみました。
- サーバ側でCSVファイルを作成し、ダウンロードさせる
- Header関数でContent-typeを出力し、整形したデータをそのまま返す
まず、サーバ側で一度ファイルを作成して、そのファイルをダウンロードさせるタイプのサンプルです。以下は、Oracle関数の例です。サンプルを見るとお分かりの通り、カンマ区切りで各カラムの値を出力しているだけです。
●PHPスクリプト
<?php
:
(Oracleとの接続からSQLのParseまで)
:
$file_name = "test.csv";
$fp = fopen( $file_name, "w" );
$contents = "\"User ID\",\"First Name\",\"Last Name\"\n";
fputs($fp, $contents);
While (Ora_Fetch($cursor) == 1) {
:
(ここでFETCHを行う)
:
$contents = "\"" . $user_id . "\",\"" . $fiest_name . "\",\"" . $last_name . "\"\n";
fputs($fp, $contents);
}
fclose( $fp );
:
(Oracleとの切断など)
:
?>
<HTML>
<META HTTP-EQUIV="Expires" CONTENT="Tue, 20 Aug 1996 14:25:27 GMT">
<HEAD>
<TITLE>ダウンロードテスト</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<a href="test.csv">ダウンロード!</a>
</BODY>
</HTML>
前のサンプルに引き続き、カンマ区切りに整形したデータをファイルに出力しないで、そのままブラウザに返すタイプのサンプルです(以下は Oracle7 関数の例)。ファイルを作成するタイプのモノとの違いは、Header関数でContent-typeを出力し、整形したデータを出力している部分です。
●PHPスクリプト
<?php
:
(Oracleとの接続からSQLのParseまで)
:
Header("Content-disposition: attachment; filename=test.csv");
Header("Content-type: application/octet-stream; name=test.csv");
$contents = ""
$contents = "\"User ID\",\"First Name\",\"Last Name\"\n";
echo $contents;
While (Ora_Fetch($cursor) == 1) {
:
(ここでFETCHを行う)
:
$contents = "\"" . $user_id . "\",\"" . $fiest_name . "\",\"" . $last_name . "\"\n";
echo $contents;
}
:
(Oracleとの切断など)
:
?>
もし「EXCELでそのまま読み込める形式」という理由だけなら、データ中のダブルクオーテーションやカンマの処理が不要なタブ区切りテキスト(TSV?:Tab Separated Value)の方をオススメしますが。。。
|