Bug #65277 [Opn->Fbk]: PHP-5.4.x and PHP-5.5.x extensions single-shot when loaded per-pool
| From: | cmb@php.net | Date: | Wed, 11 Aug 2021 12:45:37 +0000 |
| Subject: | Bug #65277 [Opn->Fbk]: PHP-5.4.x and PHP-5.5.x extensions single-shot when loaded per-pool | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-235765@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=65277&edit=1
ID: 65277
Updated by: cmb@php.net
Reported by: bruno dot premont at restena dot lu
Summary: PHP-5.4.x and PHP-5.5.x extensions single-shot when
loaded per-pool
-Status: Open
+Status: Feedback
Type: Bug
Package: FPM related
Operating System: Linux
PHP Version: 5.4.17
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Is this is still an issue with any of the actively supported PHP
versions[1]?
[1] <https://www.php.net/supported-versions.php>
Previous Comments:
------------------------------------------------------------------------
[2013-07-17 07:37:59] bruno dot premont at restena dot lu
Description:
------------
Loading extensions on a per-pool basis make the extension usable only a single time per worker
process.
Loading the extension globally for PHP via php.ini works fine.
Working setup:
php.ini:
extension=radius.so
Failing setup:
php-fpm.conf
[pool]
php_admin_value[extension] = radius.so
On failing setup following test-script fails with radius_auth_open: undefined function for second
request. Easiest testing is pm=ondemand, long enough pm.process_idle_timeout and two subsequent
requests. First request works, second one fails. The module is still reported as loaded and its
functions are still returned by get_extension_funcs() even though they are undefined.
Test script:
---------------
<?php
date_default_timezone_set('Europe/Luxembourg');
header('Content-Type: text/plain; charset=UTF-8');
printf("Checking for 'radius' extension: %s\n",
extension_loaded('radius') ? 'loaded' : 'missing');
$fa = get_extension_funcs('radius');
printf("Checking for 'radius' extension functions:%d\n", $fa === false ? -1 :
count($fa));
if ($fa !== false)
foreach ($fa as $faf)
printf("\t%s(): %s\n", $faf, function_exists($faf) ? 'exists' :
'missing');
flush();
printf("Calling radius_auth_open():\n");flush();
$rh = function_exists('radius_auth_open') ? radius_auth_open() : false;
printf("\t%s\n", $rh === false ? 'false' : 'resource');
if ($rh) {
// use $rh
...
printf("Calling radius_close()\n");flush();
$r = radius_close($rh);
printf("\t%s\n", $r === true ? 'success' : 'failed');
}
?>
Expected result:
----------------
The radius functions should be usable for each request and not only the ones that happens to be the
first request processed by the respective worker.
Actual result:
--------------
First request works, second and subsequent requests to same worker process fail with undefined
function on any call to extension functions.
extension_loaded() and get_extension_funcs() still return same information for subsequent requests
as they do for the first request.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=65277&edit=1