WAMP サーバーのセットアップ (PHP バージョン 5.3.0、Apache 2.2.11) で奇妙な問題に遭遇しました。sprintf を使用して数値を出力すると、出力文字列に誤った文字が表示されることがあります。
例: (何も削除されていません。これがスクリプト内の唯一のコードです)
$dt1 = new DateTime('now');
$dt2 = new DateTime('now - 10 min');
$interval = $dt1->diff($dt2);
$number = 10.0;
$string = sprintf("%.1f", $number);
echo "number: $number, string: $string\n";
PHP CLI を使用してコマンド プロンプトでこれを実行すると、期待どおりの出力が得られます。
数値: 10、文字列: 10.0
ただし、Apacheを使用して提供すると、ブラウザで
数値: 10、文字列: :.0
「10」があるべき場所にコロンを付けます。(':' は '9' の次の連続する ASCII 文字であることに注意してください。0 から 9 の場合$number
、すべてが機能します。10 より大きい数値は、同等の ASCII 文字を使用しているように見えます。つまり、11 は ';'、12 は '<' です。等。)
最も奇妙な点は、上記のコード サンプルの最初の 4 行が結果に影響しているように見えることです。論理的には、これらのステートメントは影響を与えないはずですが、コメントアウトするか削除すると問題は解決します。
何か案は?これを再現できる人は他にいますか?
ノート:
- 私はphp 5.3.1と5.3.2を試しましたが、どちらも同じように動作します
- 上記のスクリプトは、ブラウザーでも、Apache の再起動後に 5 ~ 6 回のページ更新で問題なく動作します。次に、説明したように、エラーが返されます