[PHP-users 10044] Re: -1との比較判定がおかしい?

HOTTA Michihide php-users@php.gr.jp
Thu, 12 Sep 2002 12:46:30 +0900


堀田@諫早市です。

On Thu, 12 Sep 2002 11:46:05 +0900 
Subject [PHP-users 10038] -1との比較判定がおかしい?
"Tatsuya Matsuyama" <tatsuya@kk-okamoto.jp> wrote:

> 松山と申します。
> RedHat7.3J+php4.2.1を使用しています。   
> 
> 以下のようなソース(行頭は行番号)が希望の動作をせず悩んでいます。

読んでいる人が、*そのまま* 実行できるようなサンプルを書くように
してください。

> 同じhost上の同じソース(test用のものです)では問題ないのですが、
> これを公開用のディレクトリで実行すると、4行目の評価に問題が生
> じます。
> # 同じapacheにVirturalHostで同居したコンテンツなので同じphp.ini
> で実行されているphpです。

原因が絞りきれない場合は、VirtualHost 周りの設定も、念のために
あったほうがよいかも ?

> 0 // ステータス判定(過去には表示しない)
> 1 $status = "";
> 2 $put_day = $count_day+(24*60*60)*$i;
> 3 $toujitsu = ($put_day-time())/(24*60*60);
> 4 if($toujitsu > -1)
> 5 {
> 6    ....
> 7 }
> 
> 3行目の後ろでは$toujitsuには希望の数値
> (-1.23456や-0.123465や1.23456など)が入っていますが
> 4行目で-0.123456が評価から漏れてしまい6行目が実行されません。
> # 希望の動作は、-0.123456と1.23456が6行目を実行することです。
> 
> 各変数をunsetして実行したり、
> 4行目の評価式を1*$toujitsu+1 > 0としたりしたのですが、
> 解決できませんでした。
> 
> 何が原因なのか、ご意見をいただけないでしょうか。
> # 文字列で評価されているのでしょうか???

以下、こちらでアレンジしたものです。意図した通りの内容になって
いるようですが。

hotta@star ~$ cat a.php
<?php
printf("PHP_VERSION=%s\n", PHP_VERSION);
$status = "";                                 // 意味なし
$put_day = $count_day + (24*60*60) * $i;      // $count_day, $i って…
printf("strlen(\$put_day)=%d \$put_day=%s\n",
    strlen($put_day), $put_day);
printf("time()=%d\n", time());
$toujitsu = ($put_day - time()) / (24*60*60);
printf("strlen(\$toujitsu)=%d \$toujitsu=%s\n",
    strlen($toujitsu), $toujitsu);
if ($toujitsu > -1) {
    print("\$toujitsu > -1\n");
} else              {
    print("\$toujitsu <= -1\n");
}
?>
hotta@star ~$ php -q a.php
PHP_VERSION=4.2.3
strlen($put_day)=1 $put_day=0
time()=1031801675
strlen($toujitsu)=16 $toujitsu=-11942.149016204
$toujitsu <= -1

たぶんやりたいことは、もう少しシンプルに書けると思うのですが、
とりあえずデバッグの練習ということで。

# ひょっとして、super faq がらみだったりして ???
-- 
堀田 倫英 <hotta@net-newbie.com> <http://www.net-newbie.com>