веб-сервисы — возможно ли поддерживать PHP-скрипт работающим даже после HTTP 500 Internal Server Error?

Я столкнулся с проблемой при обработке «Внутренняя ошибка сервера HTTP 500» в моем веб-приложении PHP.
Мое веб-приложение зацикливается на нескольких внешних веб-службах, и если какая-либо из них получает ошибку выше, мой сценарий завершается без выполнения других URL-адресов.

Ниже приведен фрагмент кода, над которым я пытаюсь работать, любая помощь будет оценена.
Пожалуйста, дайте мне знать, если кто-то хочет больше информации.

$arrURLs        = array('https://example1.com/abc1', 'https://example1.com/pqr2', 'https://example2.com/abc1', 'https://example2.com/pqr2');
$arrResponse    = array();
foreach( $arrURLs as $strURL ) {
$soap_options = array('soap_version' => SOAP_1_1,
'debug'=>1,
'trace'=>1,
'exceptions'=>TRUE,
'cache_wsdl'=>WSDL_CACHE_NONE,
'connection_timeout'=> 500,
'stream_context' => stream_context_create(array('ssl' => array('verify_peer'=> false,'verify_peer_name'=>false,) ) ) );
try{
$client = new SoapClient( $strURL . '?wsdl', $soap_options );
$client -> __setLocation( $strURL );
$response = $client->method1();
array_push( $arrResponse, $response );
} catch(\Exception $e) {
$strError = 'Exception while connecting to URL: ' . $strURL . 'Error Message: ' . $e->getMessage();
echo $strError;
}
}
// parse $arrResponse after getting from all web services;

Благодарю.

0

Решение

try{
$client = new SoapClient( $strURL . '?wsdl', $soap_options );
$client -> __setLocation( $strURL );
$response = $client->method1();
array_push( $arrResponse, $response );
} catch(\SoapFault $soapfault) {
$strError = 'SoapFault exception is caught for URL: ' . $strURL . 'Error Message: ' . $soapfault->getMessage();
echo $strError;
continue;
} catch(\Exception $e) {
$strError = 'Exception while connecting to URL: ' . $strURL . 'Error Message: ' . $e->getMessage();
echo $strError;
continue;
}

В cakephp вам нужно явно обрабатывать исключения SoapFault. Ты можешь использовать catch(SoapFault $soapfault) положив use SoapFault; а также catch(Exception $e) положив use Cake\Core\Exception\Exception; до try catch блок.

Удостоверься что $soap_options содержит 'exceptions'=>TRUE, если исключения установлены в FALSE, ваши исключения не будут обнаружены и Сценарий будет прерван, не перехватывая ваше исключение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]