2015年10月19日月曜日

PHP vsprintf "Argument number must be greater than zero"

謎のエラーが出て悩んだのでメモします。

PHP 5.5.29 にてコマンドラインから下記のスクリプトを実行しました。

■ソース(vsprintf.php)
<?php
$format = '%$1s';
$args = array( 'test' );
echo vsprintf( $format, $args );
?>

■実行結果
[kiya@test ~]$ php vsprintf.php
PHP Warning:  vsprintf(): Argument number must be greater than zero in /var/www/mainecoon/bat/vsprintf.php on line 4
PHP Stack trace:
PHP   1. {main}() /var/www/mainecoon/bat/vsprintf.php:0
PHP   2. vsprintf() /var/www/mainecoon/bat/vsprintf.php:4

vsprintf()の引数は0個より多くないとダメだよと言っているようです???
引数は $format, $args と2つ指定しているので「なに!?」となるわけですが、このエラーは $format の書式が間違っているのが原因です…え~~~。

$format で指定している '%$1s' は '%1$s' の間違いでおかしな所に$が現れたのでエラーになったんです。

そう、これエラーメッセージが間違っているんです><;

う~ん、実際には可変引数を受け取ってメッセージを合成して出力する関数でこのエラーに遭遇しまして、$formatの書式ははなから疑っていなかったため、結構な時間悩んでしまいました…

0 件のコメント:

コメントを投稿