Frage

Ich schrieb ein PHP-Code wie folgt

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

Aber wenn ich "http: //" entfernen $site erhalte ich die folgende Warnung:

  

Warning:   file_get_contents (www.google.com)   [Function.file-get-contents]: failed   zu öffnen Strom:

Ich habe versucht, try und catch aber es hat nicht funktioniert.

War es hilfreich?

Lösung

Schritt 1: überprüfen Sie den Rückgabecode: if($content === FALSE) { // handle error here... }

Schritt 2: Unterdrückung die Warnung durch eine Operator zur Fehlerkontrolle setzen (dh @) vor dem Aufruf von file_get_contents () : $content = @file_get_contents($site);

Andere Tipps

Sie können auch Ihre Fehlerhandler gesetzt als anonyme Funktion , die eine Ausnahme und verwenden Sie einen try / catch auf diese Ausnahme.

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();

Es scheint wie eine Menge Code einen wenig Fehler zu fangen, aber wenn Sie Ausnahmen in Ihrer App verwenden, würden Sie dies nur tun müssen, einmal, Art und Weise an der Spitze (in einer eingeschlossenen Config-Datei, zum Beispiel), und es wird alle Ihre Fehler zu Ausnahmen in ganz konvertieren.

Mein Liebling Weg, dies zu tun, ist ziemlich einfach:

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";
}

fand ich diese nach oben mit dem try/catch von @enobrev experimentiert, aber dies ermöglicht weniger langwierigen (und IMO, lesbaren) Code. Wir verwenden einfach error_get_last den Text des letzten Fehlers zu bekommen, und file_get_contents gibt false zurück, bei einem Fehler, so dass ein einfaches „wenn“, dass fangen.

Sie können ein @ voranstellen: $content = @file_get_contents($site);

Dies wird jede Warnung unterdrücken - sparsam verwenden !. Siehe Error Control Operators

Edit: Wenn Sie entfernen die ‚http: //‘ sie ist nicht mehr für eine Webseite suchen, sondern eine Datei auf Ihrer Festplatte namens „www.google .....“

Eine Alternative ist, um den Fehler zu unterdrücken und auch eine Ausnahme aus, die Sie später fangen. Dies ist besonders nützlich, wenn es mehrere Anrufe file_get_contents () in Ihrem Code, da Sie müssen manuell alle von ihnen nicht unterdrücken und zu handhaben. Stattdessen können mehrere Anrufe an diese Funktion in einem einzigen try / catch-Block hergestellt werden.

// 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();
}

Hier ist, wie ich es getan hätte ... Keine Notwendigkeit für Try-Catch-Block ... Die beste Lösung ist immer die einfachste ... Genießen Sie!

$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
}

Hier ist, wie ich damit umgehen:

$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();
}

Das Beste, was wäre Ihre eigenen Fehler und Exception-Handler zu setzen, die etwas tun wird, nützlich wie es in einer Datei oder E-Mail kritischsten anzumelden. http://www.php.net/set_error_handler

Sie können dieses Skript verwenden

$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";
}

Seit PHP 4 verwenden 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;
}

einfachste Weg, dies zu tun, ist nur ein @ vor file_get_contents Zierer ich. e.

$content = @file_get_contents($site); 

so etwas wie folgt aus:

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]);
}

Dies wird versuchen, die Daten zu bekommen, wenn es nicht funktioniert, wird es den Fehler abfangen und lassen Sie alles, was Sie in dem Fang müssen tun.

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

Sie sollten verwenden file_exists () Funktion vor file_get_contents () zu verwenden. Mit dieser Art und Weise werden Sie die PHP-Warnung vermeiden.

$file = "path/to/file";

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

Sie die Datei php.ini ändern

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);
});

Sie sollten auch gesetzt die

allow_url_use = On 

in Ihrem php.ini zu stoppen Warnungen erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top