Мне нравится, "когда 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>
Они работали вполне прилично на меня за прошлые несколько лет, хотя энергия всегда имеет больше секретов, чем можно знать.
Вы используете 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,
Цитата Документация по SoapClient :
Параметр исключений - это логическое значение, определяющее, вызывают ли ошибки мыла исключения типа SoapFault.
Поэтому вам следует попробовать что-то вроде:
$client = new SoapClient("some.wsdl", array('exceptions' => TRUE));
Этот способ вызовет исключения SoapFault , позволяющие их перехватить.
вы можете попробовать и выполните запрос curl или fsockopen, чтобы проверить действительность URL.
Для вашей информации я использую SapeClient с PhPunit для тестирования удаленных веб-сервисов и получил ту же проблему!
Вот мой первый метод теста:
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