Errors in SOAP should be returned as SOAP Faults. A SOAP Fault contains specific information detailing the reason for the Fault. PEAR::SOAP provides a SOAP_Fault class to aid in returning faults.

Faults can be of four basic types: VersionMismatch, MustUnderstand, Client and Server:

Faults can also contain other information, such as a basic message describing the fault, the URI of the originator of the fault, and a detail field that can be used to provide additional information on the fault.

SOAP Fault in a SOAP Message
<SOAP-ENV:Fault>
         
<faultcode xsi:type="xsd:QName">
         SOAP-ENV:Client
</faultcode>
         
<faultstring xsi:type="xsd:string">
         You sent an empty string
</faultstring>
         
<faultactor xsi:type="xsd:anyURI">
         urn:SOAP_Example_Server
</faultactor>
         
<detail xsi:type="xsd:string"/>
         
</SOAP-ENV:Fault>

Server that returns a SOAP Fault

<?php
require_once 'SOAP/Server.php';

$server = new SOAP_Server;

class 
SOAP_Example_Server {
    var 
$method_namespace 'urn:SOAP_Example_Server';

    function 
echoString($inputString)
    {
        if (!
$inputString) {
            
$faultcode 'Client';
            
$faultstring 'You sent an empty string';
            
$faultactor $this->method_namespace;
            
$detail NULL;
            return new 
SOAP_Fault($faultstring,
                                  
$faultcode,
                                  
$faultactor,
                                  
$detail);
        }
        return 
$inputString;
    }
}

$soapclass = new SOAP_Example_Server();
$server->addObjectMap($soapclass);
$server->service($HTTP_RAW_POST_DATA);
?>
Client for Example Server

<?php
require_once 'SOAP/Client.php';

$soapclient = new SOAP_Client(
    
'http://localhost/SOAP/example/exampleserver.php');

$result $soapclient->call('echoStringSimple',
                         array(
'inputString' => NULL),
                         array(
'namespace' =>
                               
'urn:SOAP_Example_Server');
if (
PEAR::isError($result)) {
    
// handle the error condition
    
echo $result->getMessage();
}
?>