Bug #79317 [Opn]: opcache and setlocale issue
| From: | cmb@php.net | 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