Richiesta HTTP fallita di cattura in PHP

Quindi, sto avendo un po 'di problemi in PHP con un file_get_contents …

Sto usando questo codice

Prima, se l'ho eseguito con un hash che non riusciva a trovare (bdfccf20b1db88d835c27685ac39f874), restituirebbe questo:

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 arrays, boolean given, called in /Users/mihir/MD5Decryptor.php on line 56 and defined in /Users/mihir/MD5Decryptor.php on line 25 

Per fermare l'avvertimento, ho cambiato

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

sulla linea 43 a

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

e l'output diventa

 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 arrays, boolean given, called in /Users/mihir/MD5Decryptor.php on line 56 and defined in /Users/mihir/MD5Decryptor.php on line 25 

Come posso rilevare l'errore? Come in, se l'hash non viene trovato, come posso modificare lo script per restituire "Hash Not Found" e non completamente crash?

Grazie in anticipo…

Il motivo per cui stai ancora ricevendo l'errore è dovuto a questa linea:

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

Quando getWordList ottiene un 404 da file_get_contents() , viene restituito FALSE che genera l'exception relativa all'invio dell'argomento non valido.

Una cosa che potresti provare a fare per risolverlo è questa:

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

Questo dovrebbe alless gestire gli URL che non riesce a caricare.

Avvolgi tutto in un block try-catch. PHP ha un meccanismo per gestire quegli errori fatali.

Qualcosa di simile dovrebbe funzionare:

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

Ecco alcuni documenti sul costrutto: http://php.net/manual/en/language.exceptions.php

Probabilmente vorrai determinare esattamente quale row di codice sta causando l'errore e usare la sottoclass più specifica di Eccezione che puoi. Questa è una best practice, dal momento che non vuoi perdere le eccezioni che non sono correlate a questo problema.

La cosa migliore che puoi fare è passare all'uso di cURL . Mentre è ansible get gli errori quando si utilizza file_get_contents() , non è molto robusto.