2011-07-07 15 views
10

En PHP, si se intenta crear una instancia de un nuevo SoapClient, y el WSDL no es accesible (servidor hacia abajo o lo que sea), un error fatal de PHP es lanzada:SoapClient repliegue de error en PHP

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from ' http://example.com/servlet/app/SomeService?wsdl ' : failed to load external entity " http://example.com/servlet/app/SomeService?wsdl "

errores fatales en PHP, hasta donde yo sé, no son recuperables.

¿Hay alguna manera de evitar esto? ¿Se puede evitar este error fatal de alguna manera?


Editar: debería decir que estoy corriendo en PHP 5.2, si hace alguna diferencia.

Respuesta

11

Esto ya ha sido discutido:

mismo Rasmus propuso la siguiente solución:

<?php 
try { 
    $x = @new SoapClient("non-existent.wsdl",array("exceptions" => 1)); 
} catch (SoapFault $E) { 
    echo $E->faultstring; 
} 
echo "ok\n"; 
+0

Desafortunadamente, esta solución no parece funcionar en PHP 5.3.10. – pthurmond

+0

Lo copié textualmente en un archivo nuevo y no está llegando al eco "Ok"; parte. – pthurmond

+2

Pero, cuando miré más abajo, encontré las notas sobre la desactivación de xdebug y eso permitió que lo anterior funcionara. – pthurmond

0

Ver este tema How do I catch a PHP Fatal Error

Básicamente usted no puede recuperarse de un error fatal, pero puede proporcionar una mejor experiencia para el usuario cuando se registra una función de desconexión

register_shutdown_function('handleShutdown'); 
function handleShutdown(){ 
    $error = error_get_last(); 
    if($error !== NULL){ 
     echo "Sorry for the inconvenience, an error just occurred."; 
    } 
} 
+0

Es cierto, pero estoy en busca de evitar el error fatal en su totalidad. –

+0

La mejor práctica es intentar capturar con certeza. – JDuarteDJ

Cuestiones relacionadas