tests/streams_7.phpt fails on PHP 8.6 because stream error messages no longer include the path.
Seen while building php86-pecl-zstd 0.17.0 against PHP 8.6.0alpha3 in Alpine Linux CI.
Failure
TEST 63/65 [tests/streams_7.phpt]
========DIFF========
Warning: readfile(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in %s
003- Warning: readfile(https://github.com/kjdev/php-ext-zstd/raw/master/tests/streaming.zst): %sailed to open stream: no suitable wrapper could be found in %s
003+ Warning: readfile(): Failed to open stream: no suitable wrapper could be found in /builds/.../tests/streams_7.php on line 2
005- Warning: readfile(compress.zstd://https://github.com/kjdev/php-ext-zstd/raw/master/tests/streaming.zst): %sailed to open stream: operation failed in %s
005+ Warning: readfile(): Failed to open stream: operation failed in /builds/.../tests/streams_7.php on line 2
===Done===
========DONE========
FAIL compress.zstd read online stream denied [tests/streams_7.phpt]
Cause
Not a regression in this extension. PHP 8.6 removed the path parameter from the stream error functions in php/php-src#22792 ("stream: remove path parameter in stream error functions", merged 2026-07-19 as 34c686a5b4e), so warnings are now emitted as readfile(): Failed to open stream… instead of readfile(<path>): Failed to open stream….
This is intentional — the same PR updated 30 of php-src's own .phpt files the same way, for example in ext/standard/tests/file/fopen_variation14-win32.phpt:
-Warning: fopen(file://fopen14.tmpDir\fopen_variation14.tmp): Failed to open stream: no suitable wrapper could be found in %s on line %d
+Warning: fopen(): Failed to open stream: no suitable wrapper could be found in %s on line %d
It is related to the removal of php_error_docref1() / php_error_docref2() listed under "Removed" in UPGRADING.INTERNALS. Note that setting error_include_args=1 does not restore the old text: it fills the parentheses with zend_trace_current_function_args_string(), which renders quoted backtrace-style arguments rather than the bare path.
tests/streams_7.phpt is the only test in the suite that embeds a path inside an expected warning, so it is the only one affected.
Suggested fix
Using %S ([^\r\n]* in run-tests.php, i.e. zero or more non-newline characters) inside the parentheses makes the expectation match both the pre-8.6 and 8.6+ output, so the test keeps working on all supported PHP versions rather than needing a version-specific variant:
--- a/tests/streams_7.phpt
+++ b/tests/streams_7.phpt
@@ -15,8 +15,8 @@
--EXPECTF--
Warning: readfile(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in %s
-Warning: readfile(https://github.com/kjdev/php-ext-zstd/raw/master/tests/streaming.zst): %sailed to open stream: no suitable wrapper could be found in %s
+Warning: readfile(%S): %sailed to open stream: no suitable wrapper could be found in %s
-Warning: readfile(compress.zstd://https://github.com/kjdev/php-ext-zstd/raw/master/tests/streaming.zst): %sailed to open stream: operation failed in %s
+Warning: readfile(%S): %sailed to open stream: operation failed in %s
===Done===
With this applied, make test on PHP 8.6.0alpha3 gives 0 failures and tests/streams_7.phpt passes (verified that it runs rather than skips — tests/streams_6.phpt is the one skipped as an online test).
Happy to send this as a PR if you prefer.
tests/streams_7.phptfails on PHP 8.6 because stream error messages no longer include the path.Seen while building
php86-pecl-zstd0.17.0 against PHP 8.6.0alpha3 in Alpine Linux CI.Failure
Cause
Not a regression in this extension. PHP 8.6 removed the path parameter from the stream error functions in php/php-src#22792 ("stream: remove path parameter in stream error functions", merged 2026-07-19 as
34c686a5b4e), so warnings are now emitted asreadfile(): Failed to open stream…instead ofreadfile(<path>): Failed to open stream….This is intentional — the same PR updated 30 of php-src's own
.phptfiles the same way, for example inext/standard/tests/file/fopen_variation14-win32.phpt:It is related to the removal of
php_error_docref1()/php_error_docref2()listed under "Removed" inUPGRADING.INTERNALS. Note that settingerror_include_args=1does not restore the old text: it fills the parentheses withzend_trace_current_function_args_string(), which renders quoted backtrace-style arguments rather than the bare path.tests/streams_7.phptis the only test in the suite that embeds a path inside an expected warning, so it is the only one affected.Suggested fix
Using
%S([^\r\n]*inrun-tests.php, i.e. zero or more non-newline characters) inside the parentheses makes the expectation match both the pre-8.6 and 8.6+ output, so the test keeps working on all supported PHP versions rather than needing a version-specific variant:With this applied,
make teston PHP 8.6.0alpha3 gives 0 failures andtests/streams_7.phptpasses (verified that it runs rather than skips —tests/streams_6.phptis the one skipped as an online test).Happy to send this as a PR if you prefer.