2

所以,我在使用 file_get_contents 的 PHP 中遇到了一些麻烦......

我正在使用此代码

之前,如果我使用找不到的哈希 (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

我怎样才能发现错误?如,如果未找到哈希,我如何修改脚本以返回“未找到哈希”而不完全崩溃?

提前致谢...

4

3 回答 3

4

您仍然收到错误的原因是因为这一行:

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。

于 2012-04-20T22:53:21.840 回答
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 子类。这是最佳实践,因为您不想错过与此问题无关的异常。

于 2012-04-20T22:51:40.977 回答
0

您可以做的最好的事情是切换到使用 cURL。虽然您在使用时会遇到错误file_get_contents(),但它不是很健壮。

于 2012-04-20T22:46:46.147 回答