PHP SoapClient не работает — нет ошибки

#php #soap-client #bronto

#php #soap-клиент #bronto

Вопрос:

У меня есть некоторый код, который подключается к службе рассылки новостей через SOAP. Он работает без проблем на нашем сервере разработки, но на нашем реальном сервере он вообще не работает. Он не возвращает никаких ошибок; просто пустая белая страница. Я вставил несколько error_logs в код и точно нашел, где он перестает работать — в строке создания нового SoapClient. Есть ли какая-то конфигурация сервера, которую необходимо установить? Наш код идентичен между dev и prod, поэтому единственное, что я могу предположить, это проблема с сервером. (Обратите внимание, что первый фрагмент кода ниже был предоставлен службой рассылки новостей, а не написан мной.)

 # bronto API session/connection setup
ini_set("soap.wsdl_cache_enabled", "0");
date_default_timezone_set('America/Chicago');

$wsdl = "https://api.bronto.com/v4?wsdl";
$url = "https://api.bronto.com/v4";

/*error log statements up to this point return what is expected; 
  an error log after the following line (starting with $client = new SoapClient) 
  does not get triggered at all. */

$client = new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8')); 
$client->__setLocation($url);

$token = "XXX";
$sessionId = $client->login(array("apiToken" => $token))->return;
$client->__setSoapHeaders(array(new SoapHeader("http://api.bronto.com/v4",
        'sessionHeader',
         array('sessionId' => $sessionId))));
  

Я также пробовал что-то подобное, чтобы явно увидеть любые ошибки, но безуспешно — в журнале ошибок по-прежнему ничего нет.

 try {  
  $client = @new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8')); 
} 
  catch (SoapFault $E) {  
    error_log($E->faultstring) ;
}  
error_log("ok"); 
  

Комментарии:

1. Я бы проверил установленные пакеты PHP на сервере разработки и сравнил с Prod-сервером. fr2.php.net/manual/en/soap.setup.php

2. Включите error_reporting. «Белый экран» обычно означает, что PHP сблевал и был настроен на скрытие всех ошибок, поэтому вы ничего не получите. Кроме того, если PHP был настроен для этого, проверьте журналы ошибок сервера (и / или php), чтобы увидеть, есть ли там что-нибудь. Возможно, он не выдает сообщения об ошибках в браузере, но они могут где-то регистрироваться.

3. @Phil, спасибо. Я только что делал это, и сюрприз! На нашем живом (размещенном) сервере вообще не установлено SOAP! Если вы хотите перенести этот комментарий в ответ, я приму его, чтобы вы получили оценку.

4. @Marc, у нас есть сообщение об ошибке, и, как я уже сказал, error_log ничего не показывал в строке, которая взорвалась.

5. странно — у меня была похожая проблема, но когда я выполнил блокировку try / catch, она выдала ошибки, и я разобрался со своей проблемой.

Ответ №1:

Я бы проверил установленные пакеты PHP на сервере разработки и сравнил с Prod-сервером. fr2.php.net/manual/en/soap.setup.php

Комментарии:

1. В этом и заключалась проблема; SOAP не установлен на нашем размещенном сервере.

Ответ №2:

Скорее всего, это будет настройка конфигурации для php на реальном сервере, но вот общие проблемы, с которыми я сталкивался с SOAP на php,

Первым делом проверьте разрешенную память для php в режиме реального времени, сопоставимом с dev (SOAP большой и плохо влияет на память)

Является ли php на реальном сервере той же версией, что и сервер разработки,

Авторизован ли текущий сервер для доступа к серверу SOAP (если auth используется на уровне IP)

поскольку один из пакетов SOAP, который я использовал, сделал это со мной, я обнаружил несоответствие версий, и последнее, но не менее важное, не могли бы вы сказать нам, какую библиотеку SOAP, если есть какая-либо другая, то php вы используете по умолчанию, чтобы мы могли помочь, поскольку ваш код выглядит хорошо 🙂

думая об этом, установите ли вы soap, я не думаю, что php изначально поддерживает это, я думаю, что это пакет pear или pecl, и если вы используете XAMPP или EasyPHP в dev, у них есть все готовые, включенные в php.