私はサーバにPHPを持っており、問題が見つかった(解決済み)。問題は、文字列に保存された長い整数と、Equalを使うことができないことの間の比較であり、私は同じを使用する必要があります。しかし、文字列との比較であれば、なぜ私はそれを使わなければならないのか分かりません。異なるPHPサーバの文字列間のPHPの比較
私はテストを行い、ローカルホストとサーバーで2つの異なる結果が得られます。
ServerのPHPのバージョン:5.3.10-1ubuntu3.10
ローカルPHPのバージョン:5.6.30-7 + deb.sury.org〜xenial +ここ
1マイルコードです:
サーバーで<?php
$a = "1285615000003961035";
$b = "1285615000003961023";
if($a == $b)
{
echo "$a == $b<br>";
}
else
{
echo "$a != $b<br>";
}
if((string)$a == (string)$b)
{
echo "(string)" . (string)$a . " == (string)" . (string)$b . "<br>";
}
else
{
echo "(string)" . (string)$a . " != (string)" . (string)$b . "<br>";
}
if($a === $b)
{
echo "$a === $b<br>";
}
else
{
echo "$a !== $b<br>";
}
if((string)$a === (string)$b)
{
echo "(string)" . (string)$a . " === (string)" . (string)$b . "<br>";
}
else
{
echo "(string)" . (string)$a . " !== (string)" . (string)$b . "<br>";
}
?>
私が取得:
1285615000003961035 == 1285615000003961023
(文字列!!)1285615000003961035 ==(文字列)1285615000003961023
1285615000003961035 == 1285615000003961023
(文字列)1285615000003961035 ==(文字列)1285615000003961023
、地域内:
1285615000003961035 = 1285615000003961023
!(文字列)1285615000003961035!=(文字列)1285615000003961023
1285615000003961035!== 1285615000003961023
(文字列)1285615000003961035!==(文字列)1285615000003961023
私はこのコードを7.0.15-1〜dotdeb + 8.1でテストしました。これはあなたのローカル結果と同じです。私は何かが5.3と5.6の間で変わったと言いたい。一般的に、PHPの大(長い)数値の正確な比較は悪夢であり、すべてのコストをかけて避けるべきです。 –
@DmitryPonkin私はそれを避けなければならないことを知っています。しかし、この大きな数は外部サービスのIDなので、他のオプションはありません。 – Pestana