2010-07-10 68 views
2

我想要做的是檢查一個圖像的年齡,如果它超過60分鐘,然後運行另一個PHP頁面來獲取圖像,否則什麼也不做,如果不到60分鐘舊....如果不到60分鐘...Filemtime/cachetime我在哪裏出錯?

腳本isn打開第二頁(radartest.php)並運行它來更新圖像,所以需要命令告訴它以腳本的形式運行。

<?php 
$imagename='./radar/auck0.png'; 
$cachetime = 3600; 
    //Start the caching of the images........ 
    if (file_exists($imagename) and filemtime($imagename) + $cachetime > time()) { 
      echo("radartest.php"); 
     } else { 
    null; //do nothing 
} 
?> 

回答

0

不確定它是否可以作爲運算符優先級。您正在使用「和」,這是優先級低於& & 嘗試包圍你的表情給力的優先級:

if ((file_exists($imagename)) && ((filemtime($imagename) + $cachetime) > time())) { 
+0

這不是什麼問題。 '&&'和'和'相對於'+'和'>'具有相同的優先級。 http://php.net/manual/en/language.operators.precedence.php – Hammerite 2010-07-10 11:44:50

+0

當我看到而不是&&時,我總是很擔心。調試測試應顯示filemtime()值,以便海報可以手動比較這些值。我發現在某些系統上,mtime並不總是可靠的 – 2010-07-10 11:50:01

+0

我改變了整條線,令人尷尬的是我在網頁上而不是在服務器上檢查圖像時代,令我驚訝的是,實際上並沒有真正觸發第二頁。 – Gary 2010-07-10 17:50:02

1

而且你使用echo('radartest.php');不應該說是include('radartest.php');

即。

<?php 
$imagename='./radar/auck0.png'; 
$cachetime = 3600; 
    //Start the caching of the images........ 
    if (file_exists($imagename) && (filemtime($imagename) + $cachetime) > time()) { 
      include ("radartest.php"); 
     } else { 
    null; //do nothing 
} 

?>

+0

已嘗試require_once,echo,打印幷包含但未觸發第二個頁面,也將測試緩存時間降至10秒以進行測試。 – Gary 2010-07-10 17:51:45

0

似乎運作良好....由filemtime返回

<?php 
$cache_file = './radar/auck0.png'; 
$cache_life = '3600'; //caching time, in seconds 
$filemtime = @filemtime($cache_file); // returns FALSE if file does not exist 
if (!$filemtime or (time() - $filemtime >= $cache_life)){ 
      include("wxrain.php"); 
     } else { 
     null; //do nothing 
} 
?> 
5

結果被緩存。

這只是一種猜測,但如果你使用這段代碼過於頻繁可能需要使用clearstatcache功能:http://php.net/manual/en/function.clearstatcache.php

+0

是的,必須使用 - clearstatcache(true,$ path); 或使用緩存數據存儲創建時間... – 2017-08-01 20:22:46