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