SoapServer::fault()
(PHP 5, PHP 7)
Issue SoapServer fault indicating an error
说明
public SoapServer::fault(string $code,string $string[,string $actor[,string $details[,string $name]]]): void
Sends a response to the client of the current request indicating an error.
Note:This can only be called when handling a request.
参数
- $code
The error code to return
- $string
A brief description of the error
- $actor
A string identifying the actor that caused the fault.
- $details
More details of the fault
- $name
The name of the fault. This can be used to select a name from a WSDL file.
返回值
没有返回值。
参见
- SoapFault::SoapFault() SoapFault constructor
This function currently terminates execution as well, which may be undesirable. See: http://bugs.php.net/bug.php?id=49513
If you use Adobe Flex, Flash or AIR as SOAP client and are unable to get the error message in case of a soap fault, upgrade to PHP 5.2.6. Details in: http://bugs.php.net/bug.php?id=43507
hi, to control the fault output one may do the following /** * mySoapServer class */ class mySoapServer extends SoapServer { public function __construct($wsdl, array $options = null) { parent::SoapServer($wsdl, $options); } public function fault ($code, $string, $actor = null, $details = null, $name = null) { throw new SoapFault($code, $string, $actor, $details, $name); } } Use: try { $server = new mySoapServer(null, array('uri' => $_SERVER['REQUEST_URI'])); $server->setClass('mySoapAPI'); $server->handle(); } catch (SoapFault $exc) { echo $exc->getTraceAsString(); } that how i did this, hope iot can help some one.
This function also sends a 500 response code back to the client with the request. This was causing issues with an Apache Axis 1.2 client I had so I instead implemented by own fault handling: <?php header("Content-Type: text/xml"); header("Status: 200"); die("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\\"http://schemas.xmlsoap.org/soap/envelope/\\"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>500</faultcode> <faultstring>".$ex->getMessage())."</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>"); ?>
Example Usage: return new SoapFault( "Client", "foo or bar must be supplied"); SOAP Fault Codes VersionMismatch: Found an invalid namespace for the SOAP Envelope element MustUnderstand : An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood Client: The message was incorrectly formed or contained incorrect information Server: There was a problem with the server so the message could not proceed