2009-10-02 11 views
1

est le code ici:erreur de capture de php "file_get_contents" en silence

if(false == (file_get_contents($jsonaddress))) 
{ 
    //error 
    print ('Error with stream, getting file instead !<br />'); 
    $jsonaddress = 'listedesodeurs.txt'; 
} 

else 
{ 
    //noerror 
    print ('Sucessfully GET data from JSON stream<br />'); 
    $jsoncontent = file_get_contents($jsonaddress); 
    $size = file_put_contents('listedesodeurs.txt', $jsoncontent); 
    echo ('Making backup of stream in file : '.round(($size/1024),0).' KB <br />'); 
} 

Lorsque les file_get_contents = true (pas d'erreur) tout se bien quand les file_get_contents = false je Justė ai obtenu le grand message d'erreur à l'écran ... j'aime juste le tester, pas l'exécuter!

COMMENT?

est ici le message d'erreur:

[function.file-get-contents]: failed to open stream: Inappropriate ioctl for device in 

Répondre

10

La manière rapide:

if(false == (@file_get_contents($jsonaddress))) 

'@' supprime les erreurs.

potentiellement mieux est de simplement tester:

if (! file_exists($jsonaddress)){ 

bien peut vous faire ce que vous voulez (voir si vous pouvez obtenir obtenir le flux, mais il suffit de retourner false si elle échoue) ... mais je Je ne sais pas comment ça va marcher. (N'ont pas essayé avec des enveloppes fopen récemment)

+0

Vous êtes génie ... et rapide! – menardmam

+0

@ est souvent considéré comme une mauvaise forme - alors respectez le deuxième exemple de Tim. Selon la configuration de votre fichier php.ini, vous devrez peut-être consulter les bibliothèques cURL pour obtenir un fichier externe. – alex

4

Vous pouvez également consulter is_readable() pour voir si file_get_contents() est susceptible d'échouer:

if(is_readable($jsonaddress)) { 
    // noerror 
    print ('Sucessfully GET data from JSON stream<br />'); 
    ... etc 
} 
else { 
    // error 
    print ('Error with stream, getting file instead !<br />'); 
    ... etc 
} 
1

Vous pouvez passer un contexte de flux à file_get_contents, ce qui vous permet un contrôle plus précis sur le comportement. En particulier, vous pouvez utiliser ignore_errors:

$content = file_get_contents(
    $jsonaddress, false, 
    stream_context_create(
    array(
     'http' => array(
     'ignore_errors' => true)))); 
$ok = preg_replace('/^.*([0-9]{3}).*$/', '$1', $http_response_header[0]) == 200;