Intereting Posts
Как установить настраиваемое сообщение об ошибке с помощью form_validation И CodeIgniter Преобразуйте строку в двоичный, а затем снова с помощью PHP Как проксировать другую страницу в PHP Лог вращается с помощью Monolog в Symfony2 Извлеките 50 случайных записей из таблицы базы данных Mysql (большой набор данных) Joomla – Допустимый размер памяти 1073741824 байт исчерпан Как отформатировать PHP-файлы с разметкой HTML в Visual Studio Code? Почему функция override_function возвращается как неопределенная функция Есть ли разница между i == 0 и 0 == i? используя завиток, чтобы перейти с одной веб-страницы на другую, используя javascript Код цикла для каждого файла в каталоге Как конвертировать запрос агрегации MongoDB в Laravel MongoDB от jenssegers Лучший способ использовать PHP для шифрования и дешифрования паролей? Как избежать эха характера 65279 в php? (Этот вопрос также относится к Javascript xmlhttp.responseText (ajax)) Firefox 13.0.1 заблокировал меня вне сеанса

Захват неудачного HTTP-запроса в PHP

Итак, у меня немного проблемы с PHP с файлом_get_contents …

Я использую этот код .

Раньше, если я запускал его с хешем, который он не мог найти (bdfccf20b1db88d835c27685ac39f874), он вернул бы это:

fcf1eed8596699624167416a1e7e122e - found: octopus (Google) bed128365216c019988915ed3add75fb - found: passw0rd (Google) d0763edaa9d9bd2a9516280e9044d885 - found: monkey (Google) dfd8c10c1b9b58c8bf102225ae3be9eb - found: 12081977 (Google) ede6b50e7b5826fe48fc1f0fe772c48f - found: 1q2w3e4r5t6y (Google) bdfccf20b1db88d835c27685ac39f874 Warning: file_get_contents(http://md5.gromweb.com/query/bdfccf20b1db88d835c27685ac39f874): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /Users/mihir/MD5Decryptor.php on line 44 Catchable fatal error: Argument 2 passed to MD5Decryptor::dictionaryAttack() must be an array, boolean given, called in /Users/mihir/MD5Decryptor.php on line 56 and defined in /Users/mihir/MD5Decryptor.php on line 25 

Чтобы остановить предупреждение, я изменил

 if ($response = file_get_contents($url)) { 

в строке 43 до

 $response = @file_get_contents($url); if ($response) { 

и выход становится

 fcf1eed8596699624167416a1e7e122e - found: octopus (Google) bed128365216c019988915ed3add75fb - found: passw0rd (Google) d0763edaa9d9bd2a9516280e9044d885 - found: monkey (Google) dfd8c10c1b9b58c8bf102225ae3be9eb - found: 12081977 (Google) ede6b50e7b5826fe48fc1f0fe772c48f - found: 1q2w3e4r5t6y (Google) bdfccf20b1db88d835c27685ac39f874 Catchable fatal error: Argument 2 passed to MD5Decryptor::dictionaryAttack() must be an array, boolean given, called in /Users/mihir/MD5Decryptor.php on line 56 and defined in /Users/mihir/MD5Decryptor.php on line 25 

Как я могу поймать ошибку? Как и в случае, если хэш не найден, как я могу изменить скрипт, чтобы вернуть «Hash Not Found», а не полностью сбой?

Заранее спасибо…

Причина, по которой вы все еще получаете ошибку, связана с этой строкой:

 return $this->dictionaryAttack($hash, $this->getWordlist($hash)); 

Когда getWordList получает 404 из file_get_contents() , возвращается FALSE и это генерирует исключение о недопустимом передаваемом аргументе.

Одна вещь, которую вы могли бы попытаться сделать, это:

 $list = $this->getWordlist($hash); if ($list === false) { return 'Error fetching URL'; } else { return $this->dictionaryAttack($hash, $list); } 

Это должно по крайней мере обрабатывать URL-адреса, которые он не может загружать.

Оберните все это в блок try-catch. У PHP есть механизм для обработки этих фатальных ошибок.

Что-то вроде этого должно работать:

 try { if ($response = file_get_contents($url)) { ... } } catch (Exception $e) { // return your "Hash Not Found" response } 

Вот несколько документов по конструкции: http://php.net/manual/en/language.exceptions.php

Вероятно, вы захотите точно определить, какая строка кода вызывает ошибку, и используйте наиболее подходящий подкласс Exception, который вы можете. Это наилучшая практика, так как вы не хотите пропустить исключения, которые не связаны с этой проблемой.

Лучшее, что вы можете сделать, это переключиться на использование cURL . Хотя вы можете получить ошибки при использовании file_get_contents() , он не очень надежный.