所以,我在PHP中遇到一些带有file_get_contents的麻烦......
我正在使用this code。
之前,如果我使用无法找到的哈希(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”而不是完全崩溃?
提前致谢...
答案 0 :(得分:4)
你仍然得到错误的原因是因为这一行:
return $this->dictionaryAttack($hash, $this->getWordlist($hash));
当getWordList从file_get_contents()
获取404时,将返回FALSE
,并且生成有关无效参数传递的异常。
你可以尝试修复它的一件事是:
$list = $this->getWordlist($hash);
if ($list === false) {
return 'Error fetching URL';
} else {
return $this->dictionaryAttack($hash, $list);
}
至少应该处理它无法加载的网址。
答案 1 :(得分:1)
将它全部包装在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子类。这是一种最佳做法,因为您不希望错过与此问题无关的异常。
答案 2 :(得分:0)
你能做的最好的事情是switch to using cURL。虽然你can get the errors when using file_get_contents()
,但它不是很强大。