【问题标题】:Check file_get_contents return before printing it在打印之前检查 file_get_contents 返回
【发布时间】:2018-01-23 15:12:16
【问题描述】:

所以我处于一个无法使用curl 的环境中,所以经过一些研究后,我发现我可以在stream_context_create 上下文中使用file_get_contents

效果很好,但是我注意到如果请求失败 file_get_contents 返回 false,我想打印一个指示错误的 JSON 对象而不是普通的 false

这是我的代码的 sn-p:

$postdata = http_build_query(
    $_POST
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);

echo file_get_contents($urlAtividade, false, $context);

我使用它从另一个 WEBService 获取数据。我在这里担心的是一些请求的输出非常大,所以我想知道检查这个的最佳方法是什么。

我想知道如果我将返回值保存在变量中,file_get_contents 的返回值会在内存中翻倍吗?因为我在这里最担心的是产生开销或内存不足。

$return = file_get_contents($urlAtividade, false, $context);

if($return === FALSE){
    $response["error"] = TRUE;
    $response["error_msg"] = "Request Failed";
    echo json_encode($response);
}
else {
    echo $return;
}

我想知道是否有办法在 if 语句中打印结果并返回 false?

【问题讨论】:

  • 如果你创建了一个函数,那么你可以返回一个 true false 和 echo/print_r resault..

标签: php mysql json web-services php-7


【解决方案1】:

我认为你不必担心这个。

给变量赋值并不会复制它,它只是创建对同一内存的引用。仅当您修改其中之一时才会生成副本。

如果您想避免将内容复制到内存中,则必须使用readfile() 而不是file_get_contents()。这会将内容直接复制到 PHP 输出缓冲区中,当它满时会定期刷新(除非您已打开输出缓冲以便捕获它)。但是,如果您这样做,那么您将无法先检查该值。

【讨论】:

  • 我真的不需要脚本上的内容,我只需要将它刷新到客户端。所以使用readfile() 将非常适合我的需求,因为如果我得到 FALSE 那么我可以打印错误 JSON 对象。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2013-06-12
  • 2022-11-04
  • 1970-01-01
相关资源
最近更新 更多