我正在开发一个非常简单的wordpress插件以连接到soap服务。它在我的本地主机上工作正常,但是在生产主机(我尝试了两种不同的主机)上,它将返回此错误:
SoapClient Object ( [trace] => 1 [_exceptions] => [_stream_context] => Resource id #303 [_soap_version] => 1 [sdl] => Resource id #304 ) Fatal error: Uncaught Error: Call to a member function GetModelfunctions() on bool in /home/.sites/278/site7279787/web/jobs/wp-content/plugins/hrjobs/jobsview.php:14...
这是功能:
function hrjobsinit() {
$wsdl = WSDL_PATH;
$handle = curl_init($wsdl);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if ($httpCode > 399)
{
$client = null;
}
else
{
$client = new SoapClient($wsdl, array(
'exceptions' => 0,
'trace' =>true
));
}
curl_close($handle);
return $client;
}
我的本地主机是PHP版本7.2.24-0ubuntu0.19.04.2,Apache / 2.4.38,cURL 7.64.0
生产主机为Linux 3.10.0-962.3.2.lve1.5.27.el6h.x86_64,cURL 7.61.0,我注意到在无法使用的生产服务器中未启用某些cURL内容(IDN,TLS-SRP,PSL)。
首先,在try / catch块中设置SoapClient类的初始化。发生错误时,SoapClient会引发一个异常,将其作为SoapFault实例。只要您处于开发模式,就启用例外。这将使事情变得容易。
try {
$client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
var_dump($fault);
}
您提供的错误消息说,您在null上调用了Webservice方法。因此,我猜您的客户端初始化不成功。您是否检查过皂扩展是否在您的网站空间上可用?要检查,只需在您的网站空间上输出phpinfo()
并搜索soap / ext。如果您有权访问服务器,请按照以下问题的答案进行操作:How do I install soap extension?否则,请询问您的提供商,是否可以启用soap扩展。