2013-05-25 18 views
5

ho con successo prelevo siti web conCome evitare l'errore file_get_contents: "Impossibile risolvere il nome host"

file_get_contents("http://www.site.com"); 

Tuttavia, se l'URL non esiste, o non raggiungibile, io sono sempre

Warning: file_get_contents(http://www.site.com) [function.file-get-contents]: 
failed to open stream: operation failed in /home/track/public_html/site.php 
on line 773 

È possibile echo "Site not reachable"; invece dell'errore?

+1

provare '@file_get_contents (...) ':) – migg

+0

Grazie. Tuttavia, ho letto da qualche parte che non dovrei usare quello @ perché non è un buon modo. – user198989

+0

Domanda duplicata: http://stackoverflow.com/questions/272361/how-can-i-handle-the-warning-of-file-get-contents-function-in-php. –

risposta

7

È possibile utilizzare il silence operator@ insieme $php_errormsg:

if(@file_get_contents($url) === FALSE) { 
    die($php_errormsg); 
} 

Qualora il @ sopprime il messaggio di errore, il testo del messaggio sarà disponibile per l'output in $php_errormsg

Ma nota che $php_errormsg è disattivata per predefinito. Dovrai attivare track_errors. Quindi aggiungere nella parte superiore del vostro codice:

ini_set('track_errors', 1); 

Tuttavia c'è un modo che non dipende da errori di pista:

if(@file_get_contents($url) === FALSE) { 
    $error = error_get_last(); 
    if(!$error) { 
     die('An unknown error has occured'); 
    } else { 
     die($error['message']); 
    } 
} 
2

questo dovrebbe funzionare:

@file_get_contents("http://www.site.com"); 

I @ sopprime avvertenze ed errori che devono essere emessi da PHP. Allora dovrai affrontare una risposta vuota.

0

È possibile disattivare gli avvertimenti in PHP:

Turn off warnings and errors on php/mysql

Vedi nella documentazione:

http://il1.php.net/manual/en/function.file-get-contents.php

Return Values: The function returns the read data or FALSE on failure.

o scrivere @, prima della funzione, per evitare di di vedere l'errore:

@file_ge t_contents (...

+0

Hmm, ma gli errori sono sempre un buon modo per gestire il problema, solo che questo è disgustoso per me. – user198989

+0

Se la richiesta di errore è può essere molti problemi.Un modo migliore per lavorare sull'estensione PHP - CURL, che se vuoi sapere esattamente cosa succede, dopo la richiesta. - Impossibile rispondere alla richiesta DNS - Pagina errata 404, 501 - Timeout del server. In ogni caso si riceve FALSE, se la richiesta è sbagliata. Non sono sicuro, se è necessario fare un'eccezione .. Meglio comunque nel server di produzione per disabilitare gli avvisi. – CETb

6

vorrei perfer per innescare eccezioni, invece di messaggi di errore:

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    // see http://php.net/manual/en/class.errorexception.php 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
} 

set_error_handler("exception_error_handler"); 

Ora è possibile vedere l'errore come questo:

try { 
    $content = file_get_contents($url); 
} catch (ErrorException $ex) { 
    echo 'Site not reachable (' . $ex->getMessage() . ')'; 
} 
+0

Prova catch è perfetto :) –

+1

Ma ti troverai nei guai con il gestore degli errori come questo – migg

+0

'Lavorare con @ può essere considerato sbagliato. LOL: D Sì, hai presentato una buona alternativa, ma fai attenzione quando dicendo cose simili – hek2mgl

Problemi correlati