我有一个函数,我用来在服务器端下载文件,文件内容在从url读取的同时被回显:
public function Download(){
if(fopen_available()){
$f=fopen($url, 'rb');
while($r=fgets($f)){
echo $r;
}
}
if(curl_available()){
/*???*/
}
return false;
}
我需要在最后一个块中放入一些curl,因此在服务器上没有启用fopen然后它可以使用curl。
如果可能的话,我宁愿没有curl写入文件,我也不希望将整个文件存储在内存中,因为它可能非常大。如果没有这两个限制那么就没有问题。
有没有办法用卷曲(或其他功能)?
我这样做的原因是我正在构建一个将在许多不同环境(包括共享托管)中使用的解决方案,我知道有些主机会关闭allow_url_fopen并需要找到替代方案。
答案 0 :(得分:0)
cUrl的默认行为是将接收的数据发送到stdout。要防止内部缓冲区占用内存限制,请将其设置为非常小的内容。
应使用以下代码每隔64个字节刷新一次流:
if (curl_available()) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 64);
if (!curl_exec($ch)) {
die(curl_error($ch));
}
curl_close($ch);
}