[PHP-users 1499] sprintf を typo
Hiroshi Morita
php-users@php.gr.jp
Fri, 24 Aug 2001 15:55:59 +0900
tyuu です。
sprintf を printf と typo したことによって問題は解決したのですが、
気持ちが悪いので、知っている方がいたら教えてください。
下記の PG がなぜ sprintf() で動かず printf() なら動くのでしょう?
サーバ側の DB のデータを export してクライアント側に
csv で与えるプログラムです。
EUC -> SJIS の変換を行おうと思います。
<?php
/* <<<<< text を DL する宣言 >>>>> */
header("Content-type: text/plane");
header( "Content-Disposition: attachment; filename=ip_export.csv" );
/*----------------------------------------*/
/* DB への接続や項目数を調べる所を省略 */
/*----------------------------------------*/
/* nkf と nkf の出力先(stdio)を開く */
$fp = popen( "/usr/local/bin/nkf -sE", "w" );
$fd = fopen( "php://stdout", "w" );
$str = ""; // 念のため初期化
/* header を渡す */
for( $i=0; $i<$cols; $i++ ){
fputs( $fp, printf( "%s,", pg_fieldname( $ret, $i ) ) );
//fputs( $fp, sprintf( "%s,", pg_fieldname( $ret, $i ) ) );
// 文字列を返す sprintf だと DB のフィールドを出力できない。
// 何もかえさない printf だと DB のフィールドを出力できる。
}
/* file への出力 sprintf を利用すると %s には何も入らない */
printf( "%s\n", fgets( $fd, 4096 ) );
/* 次は本体 */
for( $i=0; $i<$rows; $i++ ){
$str = "";
for( $j=0; $j<$cols; $j++ ){
$str .= printf( "%s,", pg_result( $ret, $i, $j ) );
}
fputs( $fp, $str );
printf( "%s\n", fgets( $fd, 4096 ) );
}
/* こちらも同様に sprintf では fgets で値が手に入らない */
/* ありがとう nkf. さようなら nkf. */
fclose( $fd );
pclose( $fp );
?>
by tyuu.