Category
bug · php-src-strict · named arguments · ext/zip · PHP_COMPILER_PROFILE=8.4
Problem
Under PROFILE=8.4, zip_open() Reflection already reports Zend's filename, and positional zip_open("/no/such.zip") returns false, but zip_open(filename: …) still throws Unknown named parameter $filename — classic BuiltinParamNames gap (same class as #23786 get_html_translation_table). Probed 2026-07-29, VM @ acd38db4c.
Repro (PHP_COMPILER_PROFILE=8.4) |
Zend / php-src |
VM (2026-07-29) |
| Reflection params |
filename |
filename |
zip_open("/no/such.zip") |
false / resource |
false |
zip_open(filename: "/no/such.zip") |
false / resource |
Unknown named parameter $filename |
php-src reference
PHP implementation target
lib/BuiltinParamNames.php — zip_open → ['filename'] (and siblings zip_read / zip_entry_* if same gap)
ext/zip/*.php only if registration bypasses the map
- PHP-in-PHP only; no new
runtime/ C
Repro
./script/docker-exec.sh -- bash -lc 'PHP_COMPILER_PROFILE=8.4 php bin/vm.php -r '\''
$n=[]; foreach ((new ReflectionFunction("zip_open"))->getParameters() as $p) $n[]=$p->getName();
echo "params=", implode(",", $n), "\n";
echo "pos=", var_export(@zip_open("/no/such.zip"), true), "\n";
try { var_export(zip_open(filename: "/no/such.zip")); }
catch (Throwable $e) { echo $e->getMessage(), "\n"; }
'\'''
Done when
Category
bug· php-src-strict · named arguments · ext/zip ·PHP_COMPILER_PROFILE=8.4Problem
Under PROFILE=8.4,
zip_open()Reflection already reports Zend'sfilename, and positionalzip_open("/no/such.zip")returnsfalse, butzip_open(filename: …)still throwsUnknown named parameter $filename— classicBuiltinParamNamesgap (same class as #23786get_html_translation_table). Probed 2026-07-29, VM @acd38db4c.PHP_COMPILER_PROFILE=8.4)filenamefilenamezip_open("/no/such.zip")false/ resourcefalsezip_open(filename: "/no/such.zip")false/ resourceUnknown named parameter $filenamephp-src reference
ext/zip/php_zip.stub.php—function zip_open(string $filename)PHP implementation target
lib/BuiltinParamNames.php—zip_open→['filename'](and siblingszip_read/zip_entry_*if same gap)ext/zip/*.phponly if registration bypasses the mapruntime/CRepro
Done when
zip_open(filename: …)matches positional semantics