Istisnayı yakalamak için açılamıyor

3 Cevap php

Neden print "Hata!" Takip etmez ama sadece 'failed to open stream ...' uyarısı yazdırır?

try {
    file_get_contents('www.invalid-url.com');
} catch (Exception $e) {
    echo 'Error!';
}

3 Cevap

file_get_contents bir istisna, ama başarısız olursa FALSE döndürür. file_get_contents son derece ilkel bir fonksiyonudur. Daha gelişmiş geribildirim istiyorsanız, kullanabileceğiniz cURL.

Örneğin böyle bir şey:

$curl = curl_init('your URL here');

// Return the output to a string instead of the screen with CURLOPT_RETURNTRANSFER
curl_setopt($pCurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($pCurl, CURLOPT_TIMEOUT, 10);

$content = curl_exec($curl);
$info = curl_getinfo($curl);

if($info['http_code'] === 200)
{
    return $content;
}

Bu hata durumunda FALSE döner, onu atmak ve istisna değildir.

Yani (gerekirse) uyarıyı bastırmak için @ kullanmak ve bir hata olup olmadığını görmek için sonucu kontrol edebilir

$content = @file_get_contents('http://www.example.com');
if ( $content === FALSE ){
    echo "Error!";
}

PHP varsayılan ancak bir hata mesajı mekanizması ile özel durumlar kullanmak değildir. İstisnaları istiyorsanız http://php.net/manual/en/class.errorexception.php gibi bir özel hata işleyicisi kullanabilirsiniz

Daha PHP'ish yolu kapatma hata mesajı olabilir ve dönüş kodu kontrol. Kapanıyor error_reporting(0); veya ini_set('display_errors', false); veya @ operatörünü kullanarak küresel yapılabilir.

<?php
if (!@file_get_contents(....)) {
    echo "ERROR";
}
?>