2013-11-02 65 views
0

有一個與服務器共享的驅動器;在共享驅動器中,有一些圖像由攝影部門定期處理。我必須寫我的網絡服務,並使用調度程序來調用它(讓我們說每個星期三),如果有任何新圖像(來自上次調用(檢查)),我必須使用它們在網站上顯示。我懷疑我的策略,我想有您的確認,以確保我在正確的軌道上:如何每週獲取新圖像 - PHP

我的策略:

1)我使用PHP SCANDIR掃描驅動器獲得所有這些特定文件夾中的圖像2)有時我會抓取新圖像,並將它們放在數據庫中(圖像是根據ID保存的)。 3)下週我運行我的web服務我檢查圖像是否在數據庫中。如果不添加它並將其視爲新圖像,...

你有什麼更好的想法嗎?

+0

你可以讓他們上傳文件到一個單獨的目錄。當您檢查該目錄中的文件時,您可以將這些文件移動到實際目錄中。這樣你就知道單獨目錄中的任何文件都是新的。 – Jeemusu

回答

1

你的方法聽起來不錯。但是,您可以通過查看文件的創建日期來在沒有數據庫的情況下執行此操作;只是假定比上次運行檢查時創建的文件更新,因此上個星期三之後創建的任何文件都是新的。

$dirPath='/path/of/your/images'; 
$files=scandir($dirPath); 
//assuming this is in fact once a week, 
//adjust '$lastCheck' based on the schedule this will run 
$lastCheck=strtotime("-7 day"); 
foreach($files as $file) 
{ 
    if (is_file("$dirPath/$file") && !is_link("$dirPath/$file")) //make sure its not a directory or symlink 
    { 
     $createTime=filectime("$dirPath/$file"); 
     //check if its older than a week 
     if ($createTime>$lastCheck) 
     { 
      //file is newer than a week 
      $newFiles[]="$dirPath/$file"; 
     } 

    } 
} 

//now $newFiles has all the files from this week, with no DB interaction. 
+0

感謝您的解決方案;但我猜這是行不通的;攝影部門可能會添加2周前創建的圖像,如果他們只是將該文件複製到共享驅動器,則不會將其捕獲爲新文件,因爲創建時間爲2周前,儘管它是新文件,但是右? – user385729

+0

我認爲你實際上依然安全。複製的創建時間將是創建副本的時間,而不是原始時間,因此如果攝影部門昨天將2周的舊文件複製到您的目錄中,則此腳本將認爲它是1天的時間。 – chiliNUT

+0

你可以通過在文件的* nix shell中執行'stat'命令來驗證,然後複製該文件,在新文件上運行'stat',並比較'Change'時間,這是'filectime ' – chiliNUT