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);
}
?>
 
沒有留言:
張貼留言