PHP nasıl file_get_contents ve uyarı () işlevi işleyebilir?

9 Cevap php

Ben böyle bir PHP kod yazdı

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

Ben gelen "http://" kısmını kaldırın Ama $site Ben şu uyarıyı alıyorum:

Warning: file_get_contents(www.google.com) [function.file-get-contents]: failed to open stream:

Ben denedim try ve catch ama işe yaramadı.

9 Cevap

Adım 1: dönüş kodu kontrol edin: if($content === FALSE) { // handle error here... }

Step 2: suppress the warning by putting an @ in front of the file_get_contents: $content = @file_get_contents($site);

Sen de set your error handler bir anonymous function bir Exception çağırır ve bu istisna bir try / catch kullanmak gibi.

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

Küçük bir hatayı yakalamak için kod bir sürü gibi görünüyor, ama size app boyunca durumlar kullanıyorsanız, sadece (örneğin dahil bir yapılandırma dosyası) üstünde, bir kez yapmanız yol gerekir, ve o olacak boyunca İstisnalar için tüm hataları dönüştürebilirsiniz.

You can prepend an @: $content = @file_get_contents($site);

Bu, herhangi bir uyarı gizlensin olacak - use sparingly!. Bkz Error Control Operators

Edit: Eğer artık bir web sayfası arıyorsanız 'http://', ​​ama denilen diskinizde bir dosyayı kaldırdığınızda "www.google ....."

İşte ben yaptım nasıl ... try-catch bloğu için gerek yok ... En iyi çözüm her zaman basit olduğunu ... Enjoy!

$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) { 
   echo "SUCCESS";
} else { 
   echo "FAILED";
}

Bir alternatif hatayı bastırmak ve ayrıca daha sonra yakalayabilirsiniz bir istisna etmektir. Elle hepsini bastırmak ve işlemek için gerek yok çünkü file_get_contents birden çok çağrı, kodunuzu () varsa, bu özellikle yararlıdır. Bunun yerine, birkaç çağrıları tek bir try / catch bloğu içinde bu fonksiyon yapılabilir.

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

Bunu yapmak için benim favori yolu oldukça basittir:

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

Yukarıda @ enobrev gelen try/catch denedikten sonra bu bulundu, ancak bu daha az uzun (ve IMO, daha okunabilir) kod sağlar. Bu yakalamak "eğer" Biz sadece error_get_last son hata metni almak için kullanmak, ve file_get_contents nedenle basit, başarısızlık false döndürür.

İşte ben bunun üstesinden nasıl:

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

Bu komut dosyasını kullanabilirsiniz

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

Ya da bunu yok bağlantıları http:// Önlerine.