PHP / Zend: Как заставить браузеры не показывать предупреждения на веб-странице для конкретного случая? - PullRequest
1 голос
/ 16 апреля 2010

Я пытаюсь получить твиттер-обновления вот так:

try {

  $doc = new DOMDocument();
  $doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');
  $isOK = true;

} catch( Zend_Exception $e ) {
  $isOK = false;
}

Если нет проблем с подключением к интернету, тогда $ isOK = true; установлено. Но если при загрузке страницы Twitter возникает проблема, она показывает следующие предупреждения и не устанавливает $ isOK = false;

Предупреждение: DOMDocument :: load (http://twitter.com/statuses/user_timeline/1234567890.rss) [domdocument.load]: не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.1 404 не найден в / var / www / vcred / application / controllers / IndexController.php на линии 120

Я не хочу видеть выше предупреждение на моей веб-странице в любом случае. Есть идеи?

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 апреля 2010

Несколько вариантов:

Подавить все ошибки только для вызова этой функции

@$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');

, что совпадает с

$oldLevel = error_reporting(0);
$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');
error_reporting($oldLevel);

Подавление ошибок таким способом, как правило, осуждается, так как это затрудняет отладку кода. Как указал Шрапнель, вы все равно хотите отключить публичное отображение всех сообщений об ошибках в производственной системе. В системах разработки вам рекомендуется использовать error_reporting(-1);, что позволит включить E_ALL и E_STRICT.

Если вы хотите использовать try/catch, вы также можете изменить обработку ошибок по умолчанию и преобразовать все ошибки в исключения, выполнив

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    throw new Exception($errstr, $errno);
}
set_error_handler("myErrorHandler");

Это глобальное изменение, которое затрагивает все вопросы. Вы также должны будете использовать catch(Exception $e) вместо Zend_Exception в своем коде, но это сработает. Обратите внимание, что приведенное выше преобразовало бы все, даже Уведомления, поэтому вы также получите Исключение о том, что $isOk не определено, если вы попытаетесь получить к нему доступ позже. Не стесняйтесь адаптировать обработчик по своему вкусу и ознакомьтесь с комментариями пользователей для set_error_handler для более уточненных версий .

Еще одним глобальным изменением будет изменение application.ini в папке вашего приложения, например позволяя Zend Framework управлять обработкой ошибок:

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Измените их по своему усмотрению. Они такие же, как в PHP.ini, например

display_errors

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

display_startup_errors

Даже когда display_errors включен, ошибки, возникающие во время последовательности запуска PHP, не отображаются. Настоятельно рекомендуется не включать display_startup_errors, кроме случаев отладки.

2 голосов
/ 16 апреля 2010
ini_set('display_errors',0);

это должно быть установлено на любом производственном объекте.
пользователям вообще нельзя разрешать видеть системные сообщения об ошибках

...