有一个 url,当我传递一些 POST 参数时,它会返回一个文件供我下载。让我的服务器下载该文件并在下载时将其发送给用户的最佳方法是什么?
提前致谢
我会为整个事情使用cURL。
目前我没有关于我的参考资料,但至少对于多 cURL,可以有一个回调函数,当一大块数据进入时触发。发生这种情况时,您将数据回显到你的客户。
这取决于你想对响应做什么,但最简单的方法是设置 CURLOPT_RETURNTRANSFER 并输出响应:
$ch = curl_init("http://stackoverflow.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resp = curl_exec($ch);
curl_close($ch);
echo $resp;
不要忘记curl_exec
在失败时返回 FALSE,所以你可能也应该检查一下:
if ($resp === false) die('Unable to contact server');
如果您还想将响应保存在服务器上(而不是上述方法,它基本上只是一个愚蠢的代理),您可以使用 CURLOPT_WRITEFUNCTION 代替。
$fp = fopen('my_file', 'w');
$ch = curl_init("http://stackoverflow.com/");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'writefunc');
curl_exec($ch);
curl_close($ch);
fclose($fp);
function writefunc($ch, $data) {
global $fp;
echo $data;
return fwrite($fp, $data);
}
write 函数有两个参数(curl 句柄、数据),并且需要一个写入数据量的返回值(在我们的例子中也是输出量)。