Bug #47584 [Com]: WSDL error in soapClient causes Fatal Error
[email protected] ("jpenn at tmwsystems dot com")
| Newsgroups | php.bugs |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=47584&edit=1
ID: 47584
Comment by: jpenn at tmwsystems dot com
Reported by: gem at rellim dot com
Summary: WSDL error in soapClient causes Fatal Error
Status: Not a bug
Type: Bug
Package: SOAP related
Operating System: Linux
PHP Version: 5.2.9
Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
This is a bug in PHP 7.0.0 VC14 X64 with Apache 2.4.17 (Win64) VC14
I am NOT running Xdebug.
Occurs on Windows 7 Professional (my development environment).
class MaddSoapClient extends SoapClient
{
public function __construct($wsdl, $options = null) {
// Created some code to make sure the wsdl is valid
$isValid = true;
if($isValid) {
try {
if($options != null) @parent::SoapClient($wsdl, $options);
else @parent::SoapClient($wsdl);
} catch(SoapFault $sf) {
// log SF
} catch(Exception $e) {
// log Exception
}
}
}
}
$msc = new MaddSoapClient("http://qasynergize.tmwsystems.com/SynWebService/Explorer.asmx?wsdl", array("exceptions" => true, 'connection_timeout' => 0, 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP));
The above error handler hacks don't work.
Email me for any settings information you like.
PHP 5.6.16 VC11 X64 throws an out of memory error but still works with the above code. PHP 5.4.45 works regardless.
Previous Comments:
------------------------------------------------------------------------
[2014-06-03 11:12:24] stefan at mailinator dot com
This is an issue with Xdebug, we also had this in PHP 5.3.10
http://bugs.xdebug.org/view.php?id=249
------------------------------------------------------------------------
[2012-10-03 09:36:52] james dot silver at computerminds dot co dot uk
The above solution(s) worked for me on an Ubuntu server, but not on IIS. My final solution added in a
custom error handler which did the trick - e.g:
<?php
if (function_exists('xdebug_disable')) {
xdebug_disable();
}
set_error_handler('my_custom_soap_wsdl_error_handler');
new SoapClient('http://google.com', array('exceptions' => TRUE));
restore_error_handler();
if (function_exists('xdebug_enable')) {
xdebug_enable();
}
function my_custom_soap_wsdl_error_handler($errno, $errstr, $errfile = NULL, $errline = NULL,
$errcontext = NULL) {
// Simulate the exception that Soap *should* have thrown instead of an error.
// This is needed to support certain IIS server setups it would seem.
$wsdl_url = isset($errcontext['wsdl']) ? $errcontext['wsdl'] : '';
$msg = "SOAP-ERROR: Parsing WSDL: Couldn't load from '" . $wsdl_url . "' : failed to load external
entity \"" . $wsdl_url . "\"";
if (class_exists('SoapFault')) {
$e = new SoapFault('WSDL', $msg);
}
else {
$e = new Exception($msg, 0);
}
throw $e;
}
?>
------------------------------------------------------------------------
[2012-01-26 08:40:50] zpon dot dk at gmail dot com
I had to surround my SoapClient call with xdebug_disable(); and xdebug_enable();
(@ was not enough) to work around this problem.
------------------------------------------------------------------------
[2010-09-02 21:10:09] gem at rellim dot com
I was a confirmed bug in earlier versions. So it should be 'Fixed' not "Bogus'.
------------------------------------------------------------------------
[2010-09-02 19:37:13] [email protected]
Right, so this is not a PHP bug. Perhaps a feature request to downgrade that
particular error to a Warning instead of a catchable fatal, but that is all I see.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=47584
--
Edit this bug report at https://bugs.php.net/bug.php?id=47584&edit=1