2016-05-18 5 views
0

最近同じ要求が既にあった場合、キャッシュファイルからAPIデータを取得しようとしています。すべてうまく動作しますが、私はちょうどそこにあるキャッシュファイルからコンテンツを取得することができません。私はエラーを見つけることができません。私はあなたが私を助けることができるといいね。PHP - フリーダでコンテンツを取得することができません

$url = /* API URL */; 

function getJson($url) { 
$cacheFile = 'cache' . DIRECTORY_SEPARATOR . md5($url) . '.json'; 

if (file_exists($cacheFile)) { 
    $fh = fopen($cacheFile, 'r'); 
    $cacheTime = filemtime($cacheFile); 

    if ($cacheTime > strtotime('-60 minutes')) { 
     $json = fread($fh); 
     return $json; 
    } 

    fclose($fh); 
    unlink($cacheFile); 
} 

$json = file_get_contents($url); 


$fh = fopen($cacheFile, 'w'); 
fwrite($fh, $json); 
fclose($fh); 

return $json; 
} 

$datab = getJson($url); 

$data = json_decode($datab, true); 
print_r($data); 
+1

キャッシュをフラッシュしてみてください。すでに何かがあるかもしれません。エラーもチェックしてください。パーミッションの問題でもあります。 var_dumpを実行してください –

+0

['fread'](http://php.net/manual/en/function.fread.php)の長さはオプションではないようです。 – apokryfos

+0

@apokryfosあなたは正しいです、それをfread($ fh、filesize($ cacheFile))に変更しました。デフォルトのタイムゾーンを設定します。今それは動作します。 TY! – Toschki

答えて

0

エラーログを確認したり、画面にエラーを表示したりすると、見つからないことがあります。

ここでは、次に2番目のパラメータを指定せずにfreadを呼び出すなど...あなたのエラーをチェック$ cachePathでなければなりません$ CACHEFILEを持っているので、「./」またはより良いDIR

の前に付けますログ、すべてのエラーを有効にします。

+1

* "これは$ cachePath"になるはずです* *?コードにそのような変数は定義されていません。 –

0

読み取る必要がある長さをfreadに指定する必要があります。

用途:

if (file_exists($cacheFile)) { 
    $fh = fopen($cacheFile, 'r'); 
    $cacheTime = filemtime($cacheFile); 

    if ($cacheTime > strtotime('-60 minutes')) { 
     $json = fread($fh,filesize($cacheFile)); 
     fclose($fh); //Remember to release resources 
     return $json; 
    } 

    fclose($fh); 
    unlink($cacheFile); 
} 

また最初fopenを必要とせずにファイル全体を取得するためにfile_get_contents($cacheFile)を使用しています。

関連する問題