有一个url,当我传递一些POST参数时,它会给我一个要下载的文件。让我的服务器下载该文件,并在下载时发送给用户的最佳方法是什么?
提前感谢
这取决于你想对响应做什么,但最简单的方法就是设置CURLOPT_RETURNTTRANSFER并输出响应:
$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句柄、数据),并需要写入的数据量的返回值(在我们的例子中,还需要输出的数据量)。
我会使用cURL来完成整个过程。
我目前没有关于我的参考,但至少对于multi-cURL,可以有一个回调函数,当一大块数据进入时就会触发。当这种情况发生时,你会将数据回显到你的客户端。