php / php/php-src

FPM: php_value and php_admin_value entries are applied in reverse order [.phpt test included]

Ouverte
#13,249 2 commentaires 2 réactions 1 personne assignée Voir sur GitHub

@bukka y travaille déjà.

Depuis le 26/1/2024.

Bug SAPI: fpm
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

The following FPM config:

[global]
error_log = {{FILE:LOG}}
[unconfined]
listen = {{ADDR}}
pm = static
pm.max_children = 5
php_value[memory_limit]=32M
php_value[memory_limit]=24M
php_admin_value[date.timezone]=Europe/London
php_admin_value[date.timezone]=Europe/Paris

Resulted in this php-fpm -tt output:

…
[26-Jan-2024 07:24:03] NOTICE: 	php_value[memory_limit] = 24M
[26-Jan-2024 07:24:03] NOTICE: 	php_value[memory_limit] = 32M
[26-Jan-2024 07:24:03] NOTICE: 	php_admin_value[date.timezone] = Europe/Paris
[26-Jan-2024 07:24:03] NOTICE: 	php_admin_value[date.timezone] = Europe/London

But I expected this output instead:

…
[26-Jan-2024 07:24:03] NOTICE: 	php_value[memory_limit] = 32M
[26-Jan-2024 07:24:03] NOTICE: 	php_value[memory_limit] = 24M
[26-Jan-2024 07:24:03] NOTICE: 	php_admin_value[date.timezone] = Europe/London
[26-Jan-2024 07:24:03] NOTICE: 	php_admin_value[date.timezone] = Europe/Paris

[!NOTE]
This is not just cosmetic ordering in php-fpm -tt; the values are also applied in this order as INI directives, so ini_get() will return 32M and Europe/London instead of the expected 24M and Europe/Paris.


PHPT:

<?php // this is just for GitHub syntax coloring ?>
--TEST--
FPM: GH-13249 - php_value and php_admin_value entries are applied in reverse order
--SKIPIF--
<?php include "skipif.inc"; ?>
--FILE--
<?php

require_once "tester.inc";

$cfg = <<<EOT
[global]
error_log = {{FILE:LOG}}
[unconfined]
listen = {{ADDR}}
pm = static
pm.max_children = 5
php_value[memory_limit]=32M
php_value[memory_limit]=24M
php_admin_value[date.timezone]=Europe/London
php_admin_value[date.timezone]=Europe/Paris
EOT;

$code = <<<EOT
<?php
echo "Test Start\n";
var_dump(ini_get('memory_limit'), ini_get('date.timezone'));
echo "Test End\n";
EOT;

$tester = new FPM\Tester($cfg, $code);
$tester->start();
$tester->expectLogStartNotices();
$tester->request()->expectBody([
    'Test Start',
    'string(3) "24M"',
    'string(12) "Europe/Paris"',
    'Test End'
]);
$tester->terminate();
$tester->close();

?>
Done
--EXPECT--
Done
--CLEAN--
<?php
require_once "tester.inc";
FPM\Tester::clean();
?>

Test log:

---- EXPECTED OUTPUT
Done
---- ACTUAL OUTPUT
>>> Response
----------------- OUT -----------------
X-Powered-By: PHP/8.3.2
Content-type: text/html; charset=UTF-8

Test Start
string(3) "32M"
string(13) "Europe/London"
Test End

----------------- ERR -----------------

---------------------------------------

ERROR: ==> The expected body:
Test Start
string(3) "24M"
string(12) "Europe/Paris"
Test End
==> does not match the actual body:
Test Start
string(3) "32M"
string(13) "Europe/London"
Test End

LOGS:
--------------------------------------------------------------------
[26-Jan-2024 08:55:34] NOTICE: fpm is running, pid 62872
[26-Jan-2024 08:55:34] NOTICE: ready to handle connections
--------------------------------------------------------------------

Done
---- FAILED
PHP Version

PHP 8.3.2

Operating System

No response

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.