J'ai rencontré un problème étrange sur une installation de serveur WAMP (PHP version 5.3.0, Apache 2.2.11). Lorsque j'utilise sprintf pour générer un nombre, il m'arrive d'obtenir des caractères erronés dans la chaîne de sortie.bug Sprintf avec PHP et Apache dans Windows?
Exemple: (non coupé de tout, c'est le seul code dans le script)
$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";
Si je lance ceci à l'invite de commande avec PHP CLI, je reçois le résultat attendu:
numéro: 10, chaîne: 10,0
Cependant, si je sers à l'aide d'Apache, dans le navigateur je reçois
Numéro: 10, chaîne:: .0
avec deux points où doit '10' être. (Notez que ':' est le prochain caractère ascii dans la séquence après '9', si $number
est 0-9, tout fonctionne.Les nombres supérieurs à 10 semblent utiliser des équivalents ascii - donc 11 est ';', 12 est '<' , etc.)
La partie la plus étrange est que les quatre premières lignes de l'exemple de code ci-dessus semblent affecter les résultats. Logiquement, ces déclarations ne devraient avoir aucun impact, mais si je les commente ou les supprime, le problème disparaît.
Des idées? Quelqu'un d'autre en mesure de reproduire cela?
Notes:
- J'ai essayé php 5.3.1 et 5.3.2, les deux se comportent de la même façon
- Le script ci-dessus fonctionne très bien, même dans le navigateur, 5-6 page est actualisée après avoir redémarré Apache. Ensuite, l'erreur, tel que décrit, retourne
est-ce que 'error_reporting' est allumé? Définissez-le sur E_ALL et recherchez les erreurs. – ircmaxell
oui, à la fois 'error_reporting' et' display_errors' sont activés - rien ne s'affiche – potatoe