You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PHP 8.5 Soap server requires the raw input to be passed to $server->handle #22285
Hi. Thank you for reporting. As people have mentioned in issue 22161, can you produce a small reproducible script for us to verify the bug? i.e. an example server script as well as the corresponding request package
Since 8.5, ext/soap looks at the soapaction header to determine the action; unless it doesn't correspond to anything or is missing: then it falls back to the old (non-compliant & broken) system.
In your example your soapactions are both empty. Why is that?
@ndossche So that the example is corresponding to the original WSDL file where I spotted this behaviour change between 8.4 vs 8.5.
But that doesn't answer the question why the soap action is empty.
It's possible to provide BC by making an exception for empty soap actions, that should work for broken WSDLs.
@ndossche Over the years I have seen WSDL files where the soapAction is non-empty, and some files where it is an empty string (like this one), but still working in the SoapServer context.
So it might be a worth to mention in other changes or backward incompatible changes, that non-compliant WSDL files might not work anymore as expected.
But to understand the new logic, is it so that:
If the $request parameter for SoapServer::handle is empty/null, it tries to find the soap action header
But if it is not empty, it uses the passed request and behaves like pre PHP 8.5 even with the non-compliant WSDL files
Over the years I have seen WSDL files where the soapAction is non-empty, and some files where it is an empty string (like this one), but still working in the SoapServer context.
In that case it might be best to go with the BC-preserving way.
Here's a patch that would ignore empty soapaction headers, which should be non-sensical anyway.
That would fix your issue:
Over the years I have seen WSDL files where the soapAction is non-empty, and some files where it is an empty string (like this one), but still working in the SoapServer context.
In that case it might be best to go with the BC-preserving way.
Here's a patch that would ignore empty soapaction headers, which should be non-sensical anyway. That would fix your issue:
Activity
jahyvari commentedon Jun 12, 2026
This seems to be a similar issue: #22161
LamentXU123 commentedon Jun 12, 2026
Hi. Thank you for reporting. As people have mentioned in issue 22161, can you produce a small reproducible script for us to verify the bug? i.e. an example server script as well as the corresponding request package
jahyvari commentedon Jun 12, 2026
Dockerfile
hello.wsdl
server.php
client.php
LamentXU123 commentedon Jun 12, 2026
Thank you! This is reproduced on my machine. cc @devnexen as the code owner.
ndossche commentedon Jun 12, 2026
Since 8.5, ext/soap looks at the soapaction header to determine the action; unless it doesn't correspond to anything or is missing: then it falls back to the old (non-compliant & broken) system.
In your example your soapactions are both empty. Why is that?
jahyvari commentedon Jun 12, 2026
@ndossche So that the example is corresponding to the original WSDL file where I spotted this behaviour change between 8.4 vs 8.5.
I did not see that the change is reported in here: https://www.php.net/migration85.incompatible.php
Hence the bug report.
ndossche commentedon Jun 12, 2026
But that doesn't answer the question why the soap action is empty.
It's possible to provide BC by making an exception for empty soap actions, that should work for broken WSDLs.
Because it shouldn't be an incompatible change, if the WSDL file is right.
jahyvari commentedon Jun 12, 2026
@ndossche Over the years I have seen WSDL files where the soapAction is non-empty, and some files where it is an empty string (like this one), but still working in the SoapServer context.
So it might be a worth to mention in other changes or backward incompatible changes, that non-compliant WSDL files might not work anymore as expected.
But to understand the new logic, is it so that:
ndossche commentedon Jun 12, 2026
In that case it might be best to go with the BC-preserving way.
Here's a patch that would ignore empty soapaction headers, which should be non-sensical anyway.
That would fix your issue:
cc @devnexen Please take care of this patch.
Your understanding is right.
devnexen commentedon Jun 14, 2026
Almost fix it you ll see.
ext/soap: ignore empty SOAPAction header during server dispatch.