Итак, у меня немного проблемы с 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()
, он не очень надежный.