curl,如何使用file_get_contents?

时间:2011-08-26 20:55:14

标签: php curl

我有一个像这样的PHP脚本:

    <?php
$likes = 'https://graph.facebook.com/google';
$fb = file_get_contents($likes);
$fb_array=json_decode($fb,true);
$all_likes = $fb_array['likes'];
$english_format = number_format($all_likes);
?>

有时会发生的是网址失败,我得到这样的内容:

Warning: file_get_contents(https://graph.facebook.com/google) [function.file-get-contents]: failed to open stream: HTTP request failed! in /var/www/html/google/index.php on line 774

我想知道是否有一种方法可以让代码优雅地降级,因为这会导致整个网站崩溃。

我在想是否有一个php或curl替代方法来处理该错误。

任何想法?

由于

编辑: 我可以这样:

    <?php
$likes = 'https://graph.facebook.com/google';
if(!@file_get_contents($likes)){
    $english_format = 123;
} else {
$fb = file_get_contents($likes);
$fb_array=json_decode($fb,true);
$all_likes = $fb_array['likes'];
$english_format = number_format($all_likes);
    } 
?>

但它仍然会减慢我的网站

3 个答案:

答案 0 :(得分:1)

我不喜欢@因为这会让代码执行变慢。但你可以使用下面的代码,因为如果一切正常你就会制作两个file_get_contents而且速度很慢

$likes = 'https://graph.facebook.com/google';
$result = @file_get_contents($likes);
if(empty($result)){
    $english_format = 123;
} else {
    $fb_array=json_decode($result,true);
    $all_likes = $fb_array['likes'];
    $english_format = number_format($all_likes);
} 

答案 1 :(得分:1)

您可以使用stream context

处理file_get_contents的HTTP错误
$context = stream_context_create(array(
    'http' => array(
         'ignore_errors' => true,
    ),
));

$fb = file_get_contents('http://www.google.com');
$code = substr($http_response_header[0], strpos($http_response_header[0], ' ')+1);

if ($code != 200) {
    // there might be a problem
}

此外,生产环境中的display_errors应为Off

答案 2 :(得分:-1)

您可以设置Error Handler来捕获(并礼貌地管理)错误。

或者您可以@ suppress出现错误,然后检查以确保$fb有效,然后再继续。