PHP Wordpress Soap Клиентский звонок с завитком странная ошибка - PullRequest
0 голосов
/ 26 апреля 2020

Я разрабатываю довольно простой плагин 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) на рабочем сервере, где он не работает.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Просто порт службы (в данном случае 85) не был включен на общем хостинге, где я тестировал. Во-вторых, curl не нужен, можно напрямую вызывать SoapClient.

   try {
    $client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
    var_dump($fault);
}
0 голосов
/ 26 апреля 2020

Прежде всего установите инициализацию класса SoapClient в блоке try / catch. SoapClient выдает исключение как экземпляр SoapFault, когда происходит ошибка. пока вы находитесь в режиме разработки, включите исключения. Это упростит задачу.

try {
    $client = new SoapClient($wsdl, $options);
} catch (SoapFault $fault) {
    var_dump($fault);
}

В сообщении об ошибке, которое вы указали, говорится, что вы вызываете метод веб-сервиса для null. Поэтому я думаю, что инициализация вашего клиента не была успешной. Вы проверили, доступно ли расширение soap в вашем веб-пространстве? Чтобы проверить это, просто выведите phpinfo() в своем веб-пространстве и выполните поиск soap / ext. Если у вас есть доступ к вашему серверу, следуйте ответу на этот вопрос: Как мне установить расширение soap? В противном случае спросите вашего провайдера, можно ли включить расширение soap.

...