Category
stdlib · php-src-strict · forward-profile registration
Problem
With PHP_COMPILER_PROFILE=8.4, builtins and extensions that Zend 8.2 does not expose report as present via function_exists() / extension_loaded(). This breaks parity scripts that gate on reference-profile availability before calling forward-only APIs.
| Probe |
Zend 8.2 (reference) |
VM profile=8.4 (2026-07-04) |
function_exists('fpow') |
false |
true |
function_exists('mb_str_pad') |
false |
true |
extension_loaded('bcmath') |
false |
true |
php-src reference
PHP implementation target
ext/standard / builtin registration tables — withhold forward-profile symbols from function_exists until the active runtime profile matches php-src for that symbol
lib/ extension probe helpers — align extension_loaded() with Zend reference profile semantics
Repro
./script/docker-exec.sh -- bash -lc '
export PHP_COMPILER_PROFILE=8.4
php bin/vm.php test/repro/maintainer_gap_fpow_phantom_registration.php # exit=1
php bin/vm.php test/repro/maintainer_gap_mb_str_pad_phantom_function_exists.php # exit=1
php bin/vm.php test/repro/maintainer_gap_bcmath_phantom_registration.php # exit=1
'
Done when
Category
stdlib· php-src-strict · forward-profile registrationProblem
With
PHP_COMPILER_PROFILE=8.4, builtins and extensions that Zend 8.2 does not expose report as present viafunction_exists()/extension_loaded(). This breaks parity scripts that gate on reference-profile availability before calling forward-only APIs.function_exists('fpow')falsetruefunction_exists('mb_str_pad')falsetrueextension_loaded('bcmath')falsetruephp-src reference
ext/standard/basic_functions.c—php_register_standard_extensions,function_existsregistryext/bcmath/bcmath.c— optional extension registrationPHP implementation target
ext/standard/ builtin registration tables — withhold forward-profile symbols fromfunction_existsuntil the active runtime profile matches php-src for that symbollib/extension probe helpers — alignextension_loaded()with Zend reference profile semanticsRepro
Done when
ok(exit 0) on VM withPHP_COMPILER_PROFILE=8.4against Zend 8.2 referencefunction_exists/extension_loadedgating