此函数目前也会终止执行,这可能不理想。参见: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>");
?>