Question

J'ai écrit un code PHP comme celui-ci

$site="http://www.google.com";
$content = file_get_content($site);
echo $content;

Mais lorsque je supprime & http; // http: // " de $ site j'obtiens l'avertissement suivant:

  

Attention:   file_get_contents (www.google.com)   [function.file-get-contents]: échec   ouvrir le flux:

J'ai essayé essayez et catch mais cela n'a pas fonctionné.

Était-ce utile?

La solution

Étape 1: vérifiez le code de retour: if ($ content === FALSE) {// gérez l’erreur ici ...}

Étape 2: supprimez l'avertissement en définissant un opérateur de contrôle des erreurs . (c.-à-d. @ ) devant l'appel à fichier_get_contents () : $ content = @file_get_contents ($ site);

Autres conseils

Vous pouvez également définir votre gestionnaire d'erreurs comme fonction anonyme qui appelle un Exception et utilisez un try / catch sur cette exception.

set_error_handler(
    function ($severity, $message, $file, $line) {
        throw new ErrorException($message, $severity, $severity, $file, $line);
    }
);

try {
    file_get_contents('www.google.com');
}
catch (Exception $e) {
    echo $e->getMessage();
}

restore_error_handler();

Il semble que beaucoup de code attrape une petite erreur, mais si vous utilisez des exceptions dans votre application, il vous suffira de le faire une fois, bien en haut (dans un fichier de configuration inclus, par exemple), et toutes vos erreurs seront converties en exceptions.

Ma façon préférée de procéder est assez simple:

if (!$data = file_get_contents("http://www.google.com")) {
      $error = error_get_last();
      echo "HTTP request failed. Error was: " . $error['message'];
} else {
      echo "Everything went better than expected";
}

J'ai trouvé cela après avoir expérimenté le try / catch de @enobrev ci-dessus, mais cela autorise un code moins long (et plus facile à lire). Nous utilisons simplement error_get_last pour obtenir le texte de la dernière erreur, et content_get_contents renvoie false en cas d'erreur. Un simple " if " peut attraper ça.

Vous pouvez ajouter un @: $ content = @file_get_contents ($ site);

Ceci supprimera tout avertissement - utilisez avec parcimonie! . Voir opérateurs de contrôle d'erreur

.

Modifier: lorsque vous supprimez le "http: //", vous ne recherchez plus une page Web, mais un fichier sur votre disque appelé "www.google ....."

.

Une solution consiste à supprimer l’erreur et à émettre une exception que vous pourrez détecter plus tard. Ceci est particulièrement utile s'il y a plusieurs appels à file_get_contents () dans votre code, car vous n'avez pas besoin de les supprimer et de les gérer tous manuellement. Plusieurs appels peuvent être faits à cette fonction dans un seul bloc try / catch.

// Returns the contents of a file
function file_contents($path) {
    $str = @file_get_contents($path);
    if ($str === FALSE) {
        throw new Exception("Cannot access '$path' to read contents.");
    } else {
        return $str;
    }
}

// Example
try {
    file_contents("a");
    file_contents("b");
    file_contents("c");
} catch (Exception $e) {
    // Deal with it.
    echo "Error: " , $e->getMessage();
}

Voici comment je l'ai fait ... Pas besoin de bloc try-catch ... La meilleure solution est toujours la plus simple ... Profitez-en!

$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) { 
   echo "SUCCESS";
} else { 
   echo "FAILED";
} 
function custom_file_get_contents($url) {
    return file_get_contents(
        $url,
        false,
        stream_context_create(
            array(
                'http' => array(
                    'ignore_errors' => true
                )
            )
        )
    );
}

$content=FALSE;

if($content=custom_file_get_contents($url)) {
    //play with the result
} else {
    //handle the error
}

Voici comment je gère cela:

$this->response_body = @file_get_contents($this->url, false, $context);
if ($this->response_body === false) {
    $error = error_get_last();
    $error = explode(': ', $error['message']);
    $error = trim($error[2]) . PHP_EOL;
    fprintf(STDERR, 'Error: '. $error);
    die();
}

La meilleure chose à faire serait de définir vos propres gestionnaires d’erreurs et d’exceptions qui feront quelque chose d’utile, comme la consignation dans un fichier ou l’envoi de messages critiques. http://www.php.net/set_error_handler

Vous pouvez utiliser ce script

$url = @file_get_contents("http://www.itreb.info");
if ($url) {
    // if url is true execute this 
    echo $url;
} else {
    // if not exceute this 
    echo "connection error";
}

Depuis PHP 4, utilisez error_reporting () :

$site="http://www.google.com";
$old_error_reporting = error_reporting(E_ALL ^ E_WARNING);
$content = file_get_content($site);
error_reporting($old_error_reporting);
if ($content === FALSE) {
    echo "Error getting '$site'";
} else {
    echo $content;
}

Le moyen le plus simple de faire cela est juste d'ajouter un @ avant file_get_contents, i. & nbsp; e.:

$content = @file_get_contents($site); 

quelque chose comme ceci:

public function get($curl,$options){
    $context = stream_context_create($options);
    $file = @file_get_contents($curl, false, $context);
    $str1=$str2=$status=null;
    sscanf($http_response_header[0] ,'%s %d %s', $str1,$status, $str2);
    if($status==200)
        return $file        
    else 
        throw new \Exception($http_response_header[0]);
}

Cela tentera d'obtenir les données. Si cela ne fonctionne pas, l'erreur sera détectée et vous permettra de faire tout ce dont vous avez besoin dans la capture.

try {
    $content = file_get_contents($site);
} catch(\Exception $e) {
    return 'The file was not found';
}

Vous devez utiliser la fonction file_exists () avant d'utiliser file_get_contents (). De cette façon, vous éviterez les avertissements php.

$file = "path/to/file";

if(file_exists($file)){
  $content = file_get_contents($file);
}

Changer le fichier php.ini

allow_url_fopen = On

allow_url_include = On
try {
   $site="http://www.google.com";
   $content = file_get_content($site);
   echo $content;
} catch (ErrorException $e) {
    // fix the url

}

set_error_handler(function ($errorNumber, $errorText, $errorFile,$errorLine ) 
{
    throw new ErrorException($errorText, 0, $errorNumber, $errorFile, $errorLine);
});

Vous devez également définir la

allow_url_use = On 

dans votre php.ini pour ne plus recevoir d'alertes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top