Bug #79317 [Opn->Csd]: opcache and setlocale issue
Edit report at https://bugs.php.net/bug.php?id=79317&edit=1
ID: 79317
User updated by: j dot arnold at qaamgo dot com
Reported by: j dot arnold at qaamgo dot com
Summary: opcache and setlocale issue
-Status: Open
+Status: Closed
Type: Bug
Package: opcache
Operating System: OpenSuse 15.1
PHP Version: 7.4.3
Block user comment: N
Private report: N
New Comment:
Thanks alot! Actually we missed the difference in optimization_level when comparing 7.3 with 7.4.
Previous Comments:
------------------------------------------------------------------------
[2020-02-28 13:19:10] cmb@php.net
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.
------------------------------------------------------------------------
[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
Thread (8 messages)