使用cURL而不是fopen

时间:2011-11-21 14:11:06

标签: php curl

我有一个函数,我用来在服务器端下载文件,文件内容在从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并需要找到替代方案。

1 个答案:

答案 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);
}