2011-11-01 74 views
0

這是我的代碼:腓捲曲:工作腳本,需要一點點添加

function get_remote_file_to_cache(){  
$sites_array = array("http://www.php.net", "http://www.engadget.com", "http://www.google.se", "http://arstechnica.com", "http://wired.com"); 
$the_site= $sites_array[rand(0, 4)]; 

    $curl = curl_init(); 
    $fp = fopen("rr.txt", "w"); 
    curl_setopt ($curl, CURLOPT_URL, $the_site); 
    curl_setopt($curl, CURLOPT_FILE, $fp);  
    curl_exec ($curl); 
    curl_close ($curl); 
}  

$cache_file = 'rr.txt'; 
$cache_life = '15'; //caching time, in seconds  
$filemtime = @filemtime($cache_file);  

if (!$filemtime or (time() - $filemtime >= $cache_life)){ 
    ob_start(); 

echo file_get_contents($cache_file);  
ob_get_flush(); 

echo " <br><br><h1>Writing to cache</h1>"; 
get_remote_file_to_cache(); 
}else{ 
    echo "<h1>Reading from cache file:</h1><br> ";  
    ob_start();  
echo file_get_contents($cache_file); 
ob_get_flush(); 

} 

一切正常,因爲它應該沒有問題或驚喜,你可以看到它的很簡單的代碼,但我是新來的CURL,並只想添加一個支票的代碼,但不知道如何:

有無論如何檢查從遠程站點獲取的文件不是404(未找到)頁面或類似的,但是一個狀態代碼200(成功)?

所以基本上,只寫入緩存文件如果填充是狀態碼200

謝謝!

+1

也許這可以幫助: http://stackoverflow.com/questions/408405/easy-way-to-test-a-url-for-404-in-php – Vikk

回答

1

要想從捲曲手柄的狀態代碼,使用curl_getinfocurl_exec

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

但緩存文件將被覆蓋時

$fp = fopen("rr.txt", "w"); 

被調用,不管的HTTP代碼,這意味着要僅在狀態爲200時更新緩存,則需要將內容讀入內存或寫入臨時文件。後來終於寫入真實的文件,如果狀態爲200

這也是執行卷曲之前一個好主意,

touch('rr.txt'); 

,以便下一次請求可能會在當前操作完成前不會也嘗試將頁面加載到頁面。

+0

「你需要將內容讀入內存,或寫入臨時文件,如果狀態爲200,最後寫入實際文件。「有一些代碼?我是新來的捲曲:( 「嘗試將網頁加載到頁面太」? - 你什麼意思在這裏 – Ryan

+0

@Ryan,我的意思是,你將不得不寫另一個文件,如rr_tmp.txt ,然後再複製到rr.txt,這樣,當它出現故障時,rr.txt不會得到改變。如果你使用這種方法,當你寫一個臨時文件,緩存文件(rr.txt)是保持原樣,它可能是捲曲運行操作時,另一個用戶可能會到您的網頁,還可以看到緩存文件已經過時,所以無論用戶進行Web服務器重新加載緩存。 – Thai

+0

這工作,謝謝! – Ryan

1

試試這個後curl_exec

$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
+0

謝謝,會嘗試 – Ryan