2.檢查要求檔案是否過期
3.重新要新的或將cache給client
<?php //////////////////////////// //將從http(或其他)讀來的檔案 //使用範例 // http://api.taipeibus.kasper.com.tw/?url=http://tw.yahoo.com/ // http://api.taipeibus.kasper.com.tw/?url=http://imp.5284.com.tw:3621/TaipeiBusService/Route.aspx?DataFormat=json //////////////////////////// function outputHttpResult($url)//您想抓取的網址 { //檔案名稱 $filename = "./cache/".str_replace("http://imp.5284.com.tw:3621/TaipeiBusService/", "", $url).".html"; //檢查檔案時間 $filetime = filemtime($filename); if($filetime == 0) { //無此檔案 要新的 getApiResultAndSave($url); } else { //檔案是否過期 if((mktime() - $filetime) >= 30) { //超過30秒 要新的 getApiResultAndSave($url); } else { //還沒超過30秒 給cache的檔案 readCacheFileAndEcho($filename); } } } //取得http資源存檔並回給client function getApiResultAndSave($url) { //檔案名稱 $filename = "./cache/".str_replace("http://imp.5284.com.tw:3621/TaipeiBusService/", "", $url).".html"; $buffer = file($url); //將網址讀入buffer變數 for($i = 0; $i < sizeof($buffer); $i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆 { echo $buffer[$i]; //全部印出來 } // 要寫入的內容 for($i = 0; $i < sizeof($buffer); $i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆 { $word .= $buffer[$i]; //全部接起來 } //$word = $buffer; $fh = fopen($filename, "w"); fwrite($fh, $word); fclose($fh); } //讀出舊的檔案並回給client function readCacheFileAndEcho($filename) { $fh = @fopen($filename,"r") or die("READ FILE ERROR!"); if($fh) { while(!feof($fh)) { echo fgets($fh); } } fclose($fh); } ?>
沒有留言:
張貼留言