此函数目前还会终止执行,这可能不理想。参见:http://bugs.php.net/bug.php?id=49513
(PHP 5, PHP 7, PHP 8)
SoapServer::fault — 发出指示错误的 SoapServer 错误
$code
,$string
,$actor
= "",$details
= null
,$name
= ""向当前请求的客户端发送响应,指示错误。
注意:
这只能在处理请求时调用。
code
要返回的错误代码
string
错误的简要描述
actor
一个字符串,标识导致错误的参与者。
details
错误的更多详细信息
name
错误的名称。这可以用来从 WSDL 文件中选择一个名称。
没有返回值。
如果您使用 Adobe Flex、Flash 或 AIR 作为 SOAP 客户端,并且在遇到 SOAP 错误时无法获取错误消息,请升级到 PHP 5.2.6。
详细信息在
http://bugs.php.net/bug.php?id=43507
嗨,
要控制错误输出,您可以执行以下操作
/**
* mySoapServer 类
*/
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);
}
}
使用
try {
$server = new mySoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('mySoapAPI');
$server->handle();
} catch (SoapFault $exc) {
echo $exc->getTraceAsString();
}
这就是我完成的方式,
希望它能帮到某些人。
此函数还会向客户端发送一个 500 响应代码,以及请求。
这导致了我遇到的一个 Apache Axis 1.2 客户端出现问题,所以我实现了自己的错误处理
<?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>");
?>
示例用法
return new SoapFault( "Client", "foo 或 bar 必须提供");
SOAP 错误代码
VersionMismatch: 找到了 SOAP Envelope 元素的无效命名空间
MustUnderstand : Header 元素的直接子元素,其 mustUnderstand 属性设置为 "1",未被理解
Client: 消息格式不正确,或包含不正确的信息
Server: 服务器出现问题,导致消息无法继续处理