2011-11-21 117 views
0

我有我使用它来下载服务器端文件的功能,该文件内容,同时呼应了从URL读它:使用cURL代替的fopen

public function Download(){ 
    if(fopen_available()){ 
     $f=fopen($url, 'rb'); 
     while($r=fgets($f)){ 
      echo $r; 
     } 
    } 
    if(curl_available()){ 
     /*???*/ 
    } 
    return false; 
} 

我需要在最后一个块中放置一些卷曲,以便在服务器上未启用fopen,那么它可以使用curl来代替。

如果可能的话,我不希望将curl写入文件,也不希望将整个文件存储在内存中,因为它可能很大。如果不是这两个限制,那么就不会有问题。

有没有办法用curl(或其他函数)做到这一点?


我这样做的原因是,我建设,将在许多不同的环境(包括共享主机)使用的解决方案,我知道有些主机将allow_url_fopen选项关闭,需要找到一个替代品。

回答

0

cUrl的默认行为是将收到的数据发送到标准输出。为防止内部缓冲区占用内存限制,将其设置为非常小的内容。

流应该被刷新每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); 
}