The 5th Annual China PHP Conference

SoapFault::SoapFault

(PHP 5 >= 5.0.1, PHP 7)

SoapFault::SoapFaultКонструктор SoapFault

Описание

SoapFault::SoapFault ( string $faultcode , string $faultstring [, string $faultactor [, string $detail [, string $faultname [, string $headerfault ]]]] )

Этот класс служит для отправки ошибочного ответа SOAP из обработчика PHP. faultcode, faultstring, faultactor и detail являются стандартными элементами ошибки SOAP.

Список параметров

faultcode

Код ошибки SoapFault.

faultstring

Сообщение об ошибке SoapFault.

faultactor

Строка идентифицирующая актор, послуживший причиной ошибки.

detail

Детальная информация о причинах ошибки.

faultname

Может быть использовано для выбора корректной кодировки ошибки из WSDL.

headerfault

Может быть использовано в процессе обработки заголовка SOAP для сообщения об ошибке в заголовке ответа.

Примеры

Пример #1 Несколько примеров

<?php
function test($x)
{
    return new 
SoapFault("Server""Some error message");
}

$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>

Можно использовать механизм исключений PHP для сообщения об ошибках SOAP.

Пример #2 несколько примеров

<?php
function test($x)
{
    throw new 
SoapFault("Server""Some error message");
}

$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>

Смотрите также

  • SoapServer::fault() - Вынуждает SoapServer вернуть ошибку
  • is_soap_fault() - Проверяет произошла ли ошибка при вызове SOAP

add a note add a note

User Contributed Notes 3 notes

up
9
del at babel dot com dot au
8 years ago
There are only a few legitimate "codes" that a SOAP fault can have and be understood by most clients in accordance with the protocol.  You can't just pass in, for example, a database error code or you'll get a fatal error like "SoapFault::__construct(): Invalid parameters. Invalid fault code."

The ones you generally want to use are "Sender" where you've gotten bad parameters, or "Receiver" where the server has gotten an error for some reason.

See here:

http://www.w3.org/TR/soap12-part1/#faultcodes
up
1
klemens dot r at gmail dot com
7 years ago
To get custom Soap Error Codes use in the catch $e->faultcode instead of $e->getCode.

<?php
try {
   
// ...
} catch (SoapFault $e) {
    echo
$e->faultcode;
}
?>
up
-1
Istratov Vadim
6 years ago
In case you need to return SOAP Fault for SOAP Client based on Adobe Flash/Flex/AIR and stuck with Flash's inability to process SOAP messages with HTTP code 500 (that's what SOAP Fault returns; read more on this error here: http://bugs.php.net/bug.php?id=43507) then try this dirty hack:

<?php
$server
= new SoapServer ( "SomeWSDL.wsdl" );
$server->setClass ( "SOAP_Class" );

/**
* Catching SOAP Server response and overriding HTTP Status code.
*/
ob_start();
$server->handle ();
$soapResponse = ob_get_contents();
ob_end_clean();

header('HTTP/1.0 200 OK');
echo
$soapResponse;
?>

Keep in mind that from PHP 5.2.6 SOAP Fault has an HTTP Status Code = 200 if User-agent is "Shockwave Flash", but when Flash object is integrated into HTML page SOAP Server receives User-agent = Broswer-agent and NOT "Shockwave Flash".

Also it'll be a good idea to return HTTP 200 Code only if 500 Error is caused by known service faults.
To Top