2011-11-21 108 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); 
}