[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.