Проверка URL допустима (от php клиента мыла)

Мне нравится, "когда ctrl-w s" и "ctlr-w v" разделяет окно. Тогда я отображаю ключи перемещения (h, j, k, l) с ctrl, удерживаемым для перемещения между окнами с несколькими панелями:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Необходимость двигать моей рукой к клавишам со стрелками является раздражающей.

Затем, я настроил ctlr-вкладку для переключения между буферами в текущее окно (как много других сред):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Они работали вполне прилично на меня за прошлые несколько лет, хотя энергия всегда имеет больше секретов, чем можно знать.

13
задан Jeremy French 14 September 2009 в 16:27
поделиться

4 ответа

Вы используете xdebug? Согласно отчету об ошибке PHP и обсуждению , проблема была исправлена, по крайней мере, с PHP 5.1, но эта ошибка xdebug мешает «преобразованию фатальной ошибки в исключение» таким образом, что исключение не создается, и фатальная ошибка «просачивается через».

Я могу воспроизвести это локально, с включенной xdebug:

try {
  $soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
  $exceptionMessage = t($e->getMessage());
  print_r($exceptionMessage);
}

Это дает мне фатальную ошибку, которую вы описали, даже без ввода предложения catch:

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'

Это работает если я отключу xdebug прямо перед вызовом:

xdebug_disable();
try {
  $soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
  $exceptionMessage = t($e->getMessage());
  print_r($exceptionMessage);
}

Это вызывает исключение, как ожидалось, и я получаю правильный объект SoapFault в предложении catch с сообщением:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'

Таким образом, в основном исключения работают так, как было объявлено. Если они не работают в вашем случае, вы можете столкнуться с ошибкой xdebug,

23
ответ дан 1 December 2019 в 21:38
поделиться

Цитата Документация по SoapClient :

Параметр исключений - это логическое значение, определяющее, вызывают ли ошибки мыла исключения типа SoapFault.

Поэтому вам следует попробовать что-то вроде:

$client = new SoapClient("some.wsdl", array('exceptions' => TRUE));

Этот способ вызовет исключения SoapFault , позволяющие их перехватить.

1
ответ дан 1 December 2019 в 21:38
поделиться

вы можете попробовать и выполните запрос curl или fsockopen, чтобы проверить действительность URL.

0
ответ дан 1 December 2019 в 21:38
поделиться

Для вашей информации я использую SapeClient с PhPunit для тестирования удаленных веб-сервисов и получил ту же проблему!

  • При использовании старой версии PHPUNIT (3.3.x) в качестве третьей стороны, CHPUNIT CRANC
  • при использовании текущей версии PhPunit (3.4.6) в качестве третьей стороны, phpunit отображать "runtimeexception".

Вот мой первый метод теста:

public function testUnavailableURL() {
    $client = new SoapClient("http://wrong.URI");
}

вот первый результат phpunit:

There was 1 error:

1) MyTestCase::testUnavailableURL
RuntimeException: 


FAILURES!

вот мой второй метод теста:

public function testUnavailableURL() {
        try {
          $client = @new SoapClient("http://wrong.URI");
        } catch (SoapFault $fault) {
          print "SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})";
        }
}

Вот второй результат теста PhPunit:

PHPUnit 3.4.6 by Sebastian Bergmann.

.SOAP Fault: (faultcode: WSDL, faultstring: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://wrong.URI' : failed to load external entity "http://wrong.URI"
)...

Time: 3 seconds, Memory: 4.25Mb

OK

NB: я нашел билет PhPunit Этот предмет: Билет 417

0
ответ дан 1 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: