[PHP-users 28166] Re: checkdate() でエラーが発生する場合としない場合

Tadashi Jokagi ml @ elf.no-ip.org
2006年 1月 19日 (木) 14:50:56 JST


      ぢょ〜@よくきたなです.
      checkdate って PHP の関数だったんですね.

Keiji Watanabeさんの「[PHP-users 28165] Re: checkdate() でエラーが発生する場合としない場合」から
>var_dump( ini_get( "error_reporting"));
>var_dump( ini_get( "display_errors"));
>checkdate(a, null, null);
>
>としてみました。
>
>string(4) "2039" string(1) "1"
>Warning: checkdate() expects parameter 1 to be long, string given in
>/export/home/com/www2/information/test.php on line 4

      「第 1 引数に文字列渡されたけど long(整数)渡せ」と書いてますが読
    めますか?

>どちらのサーバもerror_reporting, display_errorsの値は同じなのですが、
>片方でのみcheckdateの警告が表示されてしまいます。
>
>これが本来の状態だと思うのですが、"なぜ" 片方のサーバでは表示されない
>のかが不思議なんです...

      そうなると話は非常に簡単で,それぞれのサーバーで PHP のバージョ
    ンが違うからではないでしょうか? バージョンが違えば挙動が変わる,
    特にエラーや警告関連の振る舞いのはあってしかるべきでしょう.

#簡単にいうと「値チェックが厳しくなっただけ」ではないでしょうか

      とりあえず PHP 4.3.10/4.4.2 では checkdate() に下記のコードがあ
    ります.

* ext)standard/datetime.c
>PHP_FUNCTION(checkdate)
>{
>    long m, d, y;
>
>    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) {
>        RETURN_FALSE;
>    }

    ここで引数はすべて整数("lll")と書いあります.その後は追いかけてい
    ませんが,少なくとも「checkdate(a, null, null);」に対しては実装通
    りの処理かもしれません.

-- 
----.----1----.----2----.----3----.----4----.----5----.----6----.----7
Tadashi Jokagi/Shibuya city mailto:elf @ elf.no-ip.org
YokukitanaII http://elf.no-ip.org/
Yokukita blog http://blog.poyo.jp/
Yokukita wiki http://wiki.poyo.jp/


PHP-users メーリングリストの案内