所以我处于一个无法使用curl
的环境中,所以经过一些研究,我发现我可以在stream_context_create
上下文中使用file_get_contents
。
它工作得很好,但是我注意到如果请求失败file_get_contents
返回 false,我想打印一个指示错误的 JSON 对象而不是普通false
。
这是我的代码片段:
$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);
我用它来从另一个网络服务获取数据。我在这里担心的是某些请求的输出非常大,所以我想知道检查这一点的最佳方法是什么。
我想知道如果我将返回保存在变量中,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?
我认为你不需要担心这个。
为变量赋值不会复制它,它只是创建对同一内存的引用。仅当您修改其中一个副本时,才会创建副本。
如果要避免将内容复制到内存中,则必须使用 readfile()
而不是 file_get_contents()
。这会将内容直接复制到 PHP 输出缓冲区中,该缓冲区在填满时会定期刷新(除非您已打开输出缓冲以便可以捕获它(。但是,如果这样做,则无法先检查值。