PHP Wordpress Soap 客户端调用 curl 出现奇怪错误
PHP Wordpress Soap Client call with curl strange Error
我正在开发一个非常简单的 wordpress 插件来连接到 soap 服务。它在我的本地主机上工作正常,但在生产主机上(我尝试了两个不同的)它 returns 这个错误:
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 class 的初始化。发生错误时,SoapClient 会抛出一个 Exception 作为 SoapFault 实例。只要您处于开发模式,就启用例外。这会让事情变得更容易。
try {
$client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
var_dump($fault);
}
您提供的错误消息说,您在 null 上调用了 web 服务方法。所以我猜你的客户端初始化不成功。您是否检查过您的网站空间是否提供 soap 扩展?要检查这一点,只需在您的网站空间上输出 phpinfo()
并搜索 soap/ext。如果您有权访问您的服务器,请按照此问题的答案进行操作:How do I install soap extension? 否则请询问您的提供商是否可以启用 soap 扩展。
只是在我测试的共享主机中没有启用服务端口(在本例中为 85)。第二件事是不需要 curl,可以直接调用 SoapClient。
try {
$client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
var_dump($fault);
}
我正在开发一个非常简单的 wordpress 插件来连接到 soap 服务。它在我的本地主机上工作正常,但在生产主机上(我尝试了两个不同的)它 returns 这个错误:
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 class 的初始化。发生错误时,SoapClient 会抛出一个 Exception 作为 SoapFault 实例。只要您处于开发模式,就启用例外。这会让事情变得更容易。
try {
$client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
var_dump($fault);
}
您提供的错误消息说,您在 null 上调用了 web 服务方法。所以我猜你的客户端初始化不成功。您是否检查过您的网站空间是否提供 soap 扩展?要检查这一点,只需在您的网站空间上输出 phpinfo()
并搜索 soap/ext。如果您有权访问您的服务器,请按照此问题的答案进行操作:How do I install soap extension? 否则请询问您的提供商是否可以启用 soap 扩展。
只是在我测试的共享主机中没有启用服务端口(在本例中为 85)。第二件事是不需要 curl,可以直接调用 SoapClient。
try {
$client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
var_dump($fault);
}