Bug #79317 [Opn]: opcache and setlocale issue

From: Date: Fri, 28 Feb 2020 13:19:10 +0000
Subject: Bug #79317 [Opn]: opcache and setlocale issue
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-225783@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79317&edit=1 ID: 79317 Updated by: cmb@php.net Reported by: j dot arnold at qaamgo dot com Summary: opcache and setlocale issue Status: Open Type: Bug Package: opcache Operating System: OpenSuse 15.1 PHP Version: 7.4.3 Block user comment: N Private report: N New Comment: This is due to opcode optimization, in this case OPcache produces: ECHO string("Concatenated string: 0,5 invalidate cache for this class by changing something here: v1<br />") This also potentially happens with PHP 7.3; it depends on opcache.optimization_level. Using opcache.optimization_level=0x7FFEBF7F (i.e. disabling bit 7) makes the code working as expected. Previous Comments: ------------------------------------------------------------------------ [2020-02-28 12:55:01] j dot arnold at qaamgo dot com > and how does that justify different behavior with or wuthout opcache? exactly, also with opcache the first call is float is correct with a "," and the second call is incorrect with a "." ------------------------------------------------------------------------ [2020-02-28 12:42:59] bugreports at gmail dot com > This is due to the fact that displaying floats are locale aware and how does that justify different behavior with or wuthout opcache? ------------------------------------------------------------------------ [2020-02-28 12:32:44] girgias@php.net This is due to the fact that displaying floats are locale aware. ------------------------------------------------------------------------ [2020-02-28 12:28:29] j dot arnold at qaamgo dot com Description: ------------ When executing the code below with "?lang=de_DE", the first call will result in a float with comma in the concatenated string. On the second call this will result in a float with a dot. When disabling opcache the issue is gone and it is always a comma. Also in php 7.3 this issue does not occure. So it seems that opcache is ignoring the setlocale. Test script: --------------- class Test { function __construct() { // call https://domain.tld?lang=de_DE // first call will result in a float with COMMA in the concatenated string // second call will result in a float with DOT in the concatenated string if ($_GET['lang']) { setlocale(LC_ALL, $_GET['lang'] . '.utf-8'); } $z = 0.5; $y = $z . ' invalidate cache for this class by changing something here: v1'; echo 'Concatenated string: ' . $y . '<br />'; echo 'Plain Variable: '; echo $z; echo '<br />'; exit; } } $test = new Test(); Expected result: ---------------- The float will always be with ",". ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79317&edit=1

« previous php.bugs (#225783) next »