Я столкнулся с проблемой при обработке «Внутренняя ошибка сервера 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;
Благодарю.
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, ваши исключения не будут обнаружены и Сценарий будет прерван, не перехватывая ваше исключение.
Других решений пока нет …