Почему не следующая печать «Ошибка!» но только печатает предупреждение «не удалось открыть поток ...»?Невозможно исключить ловушку
try {
file_get_contents('www.invalid-url.com');
} catch (Exception $e) {
echo 'Error!';
}
Почему не следующая печать «Ошибка!» но только печатает предупреждение «не удалось открыть поток ...»?Невозможно исключить ловушку
try {
file_get_contents('www.invalid-url.com');
} catch (Exception $e) {
echo 'Error!';
}
file_get_contents не бросает исключение, но возвращает FALSE, если это не удается. file_get_contents - очень примитивная функция. Если вам нужна более продвинутая обратная связь, используйте cURL.
E.g. что-то вроде этого:
$curl = curl_init('your URL here');
// Return the output to a string instead of the screen with CURLOPT_RETURNTRANSFER
curl_setopt($pCurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($pCurl, CURLOPT_TIMEOUT, 10);
$content = curl_exec($curl);
$info = curl_getinfo($curl);
if($info['http_code'] === 200)
{
return $content;
}
Он возвращает FALSE при ошибке, он не бросает и исключение.
Таким образом, вы можете использовать @ для подавления предупреждения (если требуется) и проверьте результат, чтобы увидеть, если произошла ошибка
$content = @file_get_contents('http://www.example.com');
if ($content === FALSE){
echo "Error!";
}
PHP не использует исключения по умолчанию, но механизм сообщений об ошибках. Если вы хотите исключений, вы можете использовать собственный обработчик ошибок, например, в http://php.net/manual/en/class.errorexception.php
Чем больше PHP'ий был бы выключение сообщения об ошибке и проверка кода возврата. Выключение можно выполнить глобально на error_reporting(0);
или ini_set('display_errors', false);
или с помощью оператора @
.
<?php
if ([email protected]_get_contents(....)) {
echo "ERROR";
}
?>
Принудительные сообщения об ошибках никогда не помогали ничему улучшить жизнь. Это не путь. Если вы достигнете точки, в которой вы должны отлаживать этот код, вы ударяете себя по голове, когда поймете, что выбрасываете действительную отладочную информацию. – TheGrandWazoo
Ошибки глобального подавления - очень плохая идея, но подавление ошибок с помощью '@' в отдельном заявлении здесь, а иногда может быть самым простым решением - даже тогда имейте в виду, что даже подавленные ошибки неэффективны: обработчик ошибок всегда, или даже при подавлении ошибки. С другой стороны, подавление ошибок во всем, что приводит к более чем одной строке исполняемого PHP (например, 'include' или вызов определенной пользователем функции), является, безусловно, хорошим способом отладки ад. –
, так что лучше всего было бы оставить отчет об ошибках при разработке поворота их во всем мире, когда код будет готов? – breez
, который объясняет alot :) – breez