Отключить ошибки в PHP

Как отключить ошибки только для определенной функции php, и в то же время узнать, что ошибка произошла? Например, я использую функцию php parse_url для анализа массива URL-адресов, иногда она возвращает ошибку, и я хочу проанализировать следующий URL-адрес при возникновении ошибки, а не отображать ее (ошибку) на экране.

5.11.2009 16:14:35
7 ОТВЕТОВ
РЕШЕНИЕ

символ @ перед функцией будет подавлять сообщение об ошибке, а parse_url () возвращает false при ошибке, поэтому просто поймайте это.

 if(@parse_url($url) === false) {
        //Error has been caught here
    }
2
5.11.2009 16:18:22

Префикс вашего вызова функции с @, поэтому использование @parse_url()должно скрыть ошибку

0
5.11.2009 16:17:10
Будьте осторожны с использованием "@", это повлияет на производительность скрипта. Много
Gabriel Sosa 5.11.2009 16:21:22
Хм, это странно, никогда не думал, что это будет так. Ты знаешь почему?
Wim 5.11.2009 16:25:43
Это звучало подозрительно, поэтому я провел миллион тестов parse_url () для хороших и плохих URL-адресов, с @ и без @. Результат: хороший URL, нет @: 1.986s плохой URL, нет @: 1.519s хороший URL, с @: 3.612s плохой URL, с @: 2.567s Использование PHP 5.2.5 на незагруженной машине. Таким образом, вы можете увидеть, что это медленнее с '@', но мы говорим о разнице в 1-2 микросекунды на звонок.
Cal 5.11.2009 22:04:04

Чтобы скрыть ошибки для определенного оператора, просто добавьте @.

пример

$file = @file_get_contents($url);

Когда file_get_contentsможет выдать ошибку, когда $ url не найден.

Вы можете использовать знак @ в любом месте, чтобы скрыть любые утверждения. Подобно:

$i = @(5/0);
0
5.11.2009 16:17:18

@ это зло.

Вы можете использовать это:

try {
  // your code
} catch (Exception $e) {
  // a block that executed when the exception is raised
}
2
5.11.2009 16:17:33
Это должно быть:} catch (Exception $ e) {И он не будет отлавливать ошибки, только выбрасывать исключения.
Scott Saunders 5.11.2009 16:20:53
За исключением того, что ни одна из стандартных функций PHP не использует исключения, они используют только обычные ошибки. Вы можете преобразовать их в исключения, однако, смотрите здесь: be.php.net/manual/en/class.errorexception.php
Wim 5.11.2009 16:22:54

Возможно, вы захотите взглянуть на set_error_handler().

Вы можете делать все что угодно, регистрируя свой собственный обработчик.

3
5.11.2009 16:18:04

Похоже, вы ищете пользовательский обработчик ошибок

http://php.net/manual/en/function.set-error-handler.php

1
5.11.2009 16:18:48

лучший способ - преобразовать php «ошибки» в исключения, используя описанную здесь технику http://php.net/manual/en/class.errorexception.php, а затем обработать исключение, как вы это делаете на других языках:

 function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
 }
 set_error_handler("exception_error_handler");


try {
   parse_url(...)
} catch(Exception $e) {
1
5.11.2009 16:19:18