- Timestamp:
- 2014/04/29 13:19:40 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13-dev/data/class/helper/SC_Helper_CSV.php
r23362 r23375 21 21 public $arrSubnaviName; 22 22 23 /** ヘッダーを出力するか (cbOutputCSV 用) */ 24 private $output_header = false; 25 23 26 /** 24 27 * デフォルトコンストラクタ. … … 208 211 public function cbOutputCSV($data) 209 212 { 213 // 1行目のみヘッダーを出力する 214 if ($this->output_header) { 215 $line = $this->sfArrayToCsv(array_keys($data)); 216 $line = mb_convert_encoding($line, 'SJIS-Win'); 217 $line .= "\r\n"; 218 fwrite($this->fpOutput, $line); 219 $this->output_header = false; 220 } 210 221 $line = $this->sfArrayToCsv($data); 211 222 $line = mb_convert_encoding($line, 'SJIS-Win'); … … 222 233 * @param integer $sql SQL文 223 234 * @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。 224 * @param string $file_headファイル名の頭に付ける文字列225 * @param array $arrHeader ヘッダ出力列配列226 * @param boolean $is_downloadtrue:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。)235 * @param string ファイル名の頭に付ける文字列 236 * @param array|null ヘッダ出力列配列。null の場合、SQL 文の列名を出力する。 237 * @param boolean true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。) 227 238 * @return mixed $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string 228 239 */ 229 public function sfDownloadCsvFromSql($sql, $arrVal = array(), $file_head = 'csv', $arrHeader = array(), $is_download = false)240 public function sfDownloadCsvFromSql($sql, $arrVal = array(), $file_head = 'csv', $arrHeader = null, $is_download = false) 230 241 { 231 242 $objQuery =& SC_Query_Ex::getSingletonInstance(); 232 243 233 // ヘッダ構築 234 if (is_array($arrHeader)) { 235 $header = $this->sfArrayToCsv($arrHeader); 236 $header = mb_convert_encoding($header, 'SJIS-Win'); 237 $header .= "\r\n"; 238 } 239 240 //テンポラリファイル作成 244 // テンポラリファイル作成 241 245 // TODO: パフォーマンス向上には、ストリームを使うようにすると良い 242 246 // 環境要件がPHPバージョン5.1以上になったら使うように変えても良いかと … … 244 248 $tmp_filename = tempnam(CSV_TEMP_REALDIR, $file_head . '_csv'); 245 249 $this->fpOutput = fopen($tmp_filename, 'w+'); 246 fwrite($this->fpOutput, $header); 250 $this->output_header = false; 251 252 // ヘッダー構築 253 if (is_array($arrHeader)) { 254 $header = $this->sfArrayToCsv($arrHeader); 255 $header = mb_convert_encoding($header, 'SJIS-Win'); 256 $header .= "\r\n"; 257 fwrite($this->fpOutput, $header); 258 } elseif (is_null($arrHeader)) { 259 // ループバック内でヘッダーを出力する 260 $this->output_header = true; 261 } 262 247 263 $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql, $arrVal); 264 265 // コールバック内でヘッダー出力する場合、0行時にヘッダーを生成できない。 266 // コールバックが呼ばれていない場合、念のため CRLF を出力しておく。 267 // XXX WEB画面前提で、アラート表示する流れのほうが親切かもしれない。 268 if ($this->output_header) { 269 fwrite($this->fpOutput, "\r\n"); 270 } 248 271 249 272 fclose($this->fpOutput); … … 257 280 } 258 281 259 // テンポラリファイル削除282 // テンポラリファイル削除 260 283 unlink($tmp_filename); 261 284
Note: See TracChangeset
for help on using the changeset viewer.