2013-04-21 11 views
6

Sto cercando di errore gestire il metodo file_get_contents quindi, anche se l'utente inserisce un sito web non corretta sarà eco un messaggio di errore piuttosto che il poco professionalefile_get_contents buon modo per gestire gli errori

Warning: file_get_contents (sidiowdiowjdiso): Impossibile aprire il flusso: Nessun file o directory in C: \ xampp \ htdocs \ test.php on line 6

ho pensato che se faccio una prova e prenderlo sarà in grado di rilevare l'errore, ma che non ha funzionato.

try 
{ 
$json = file_get_contents("sidiowdiowjdiso", true); //getting the file content 
} 
catch (Exception $e) 
{ 
throw new Exception('Something really gone wrong', 0, $e); 
} 
+4

Se si desidera leggere gli URL si dovrebbe perlomeno verificare che assomigliano URL prima, altrimenti la gente potrebbe leggere i file sul server. Un'alternativa migliore potrebbe essere l'uso di CURL –

risposta

10

Prova cURL con curl_error invece di file_get_contents:

<?php 
// Create a curl handle to a non-existing location 
$ch = curl_init('http://404.php.net/'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$json = ''; 
if(($json = curl_exec($ch)) === false) 
{ 
    echo 'Curl error: ' . curl_error($ch); 
} 
else 
{ 
    echo 'Operation completed without any errors'; 
} 

// Close handle 
curl_close($ch); 
?> 
+8

Giù votato perché questa non è una risposta alla domanda dell'OP riguardante l'uso di file_get_contents() - offrire un'alternativa non è una soluzione reale. L'OP ha chiesto come gestire gli errori e gli avvertimenti da file_get_contents() non come farlo in un modo completamente diverso. Tieni presente che cURL non sostituisce in modo inaspettato i file_get_contents() di PHP e chiunque effettui la migrazione dovrà refactorizzare seriamente il loro codice, quindi perché questa non è una risposta accettabile. – tpartee

7

file_get_contents non un'eccezione per errore, invece restituisce false, in modo da poter verificare se il valore restituito è falso:

$json = file_get_contents("sidiowdiowjdiso", true); 
if ($json === false) { 
    //There is an error opening the file 
} 

In questo modo è ancora ottenere l'avviso, se si desidera per rimuoverlo, devi mettere uno @ davanti a file_get_contents. (Questo è considerato una cattiva pratica)

$json = @file_get_contents("sidiowdiowjdiso", true); 
+7

Potrebbe essere meglio discutere [error_reporting()] (http://uk1.php.net/manual/en/function.error-reporting.php) piuttosto che promuovere l'uso di '@' –

+0

Forse vale la pena notare che mentre si utilizza il prefisso '@' potrebbe impedire la visualizzazione del messaggio di errore agli utenti, se si registrano errori nei file utilizzando una funzione assegnata a 'set_error_handler', si vedranno comunque gli avvisi registrati nei file, e se non lo hai, saranno inclusi nei log del tuo server web. – richhallstoke

4

Si potrebbe fare una delle seguenti:

Impostare un gestore errori globale (che la volontà gestire anche le AVVERTENZE), per tutte le eccezioni non gestite: http://php.net/manual/en/function.set-error-handler.php

Oppure controllando il valore di ritorno del file_get_conten funzione ts (con l'operatore ===, poiché restituisce booleano false in caso di errore), quindi gestire il messaggio di errore di conseguenza e disabilitare la segnalazione degli errori sulla funzione anteponendo un "@" in questo modo:

+0

quando ho provato questo codice legge sempre falso anche se l'URL era valido – Hashey100

-1

come soluzione al vostro problema riprova esecuzione seguente frammento di codice

try 
{ 
    $json = @file_get_contents("sidiowdiowjdiso", true); //getting the file content 
    if($json==false) 
    { 
    throw new Exception('Something really gone wrong'); 
    } 
} 
catch (Exception $e) 
{ 
    echo $e->getMessage(); 
} 
+0

ancora ricevere un avviso quando ho eseguito il codice – Hashey100

+0

Ora prova ad eseguire il frammento di codice sopra –

+0

stesso risultato restituisce sempre falso anche se un url valido è inserito tale come www.google.com – Hashey100

Problemi correlati