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);
}