2013-01-17 56 views
1

我讀過,我可以使用應用程序/緩存或應用程序/日誌tmp文件,但它不覺得正確,因爲他們不會被刪除,除非我自己做。我在哪裏可以在Symfony2中存儲tmp文件?

例如,我需要存儲的日期在文件(我不想用數據庫來實現此),我只需要它是有2或3天。

我該怎麼辦?

+0

將它放在一個普通的文件中放到你的包中的tmp文件夾中。 然後使用cron(如果這段時間間隔是固定的)將其刪除 – DonCallisto

+0

版本3.3中更改了Symfony目錄佈局。現在'/ app'只包含配置文件,模板和網頁資源。日誌,臨時文件和緩存已被移至'/ var'。 – MauganRa

回答

2

讓Web服務器在一個包內寫入是不是一個好習慣。你可以做到這一點,但你必須處理權限,它會帶來安全風險......

爲什麼不使用/ tmp(在UNIX服務器上)定期清理或者你自己的tmp目錄像/ home/ChocoDeveloper/tmp與cron任務清理它?

2

抱歉,這並不是一個問題的具體問題被問,但我認爲有實現這一目標而不是訴諸於一個臨時文件存儲日期的更好的方法,即使你不想使用數據庫。

您是否考慮過使用Redis或Memcache?有Symfony2捆綁這兩個應該使生活變得更容易一些,雖然你需要確保兩者都已安裝並在服務器上運行。

例如,如果您要使用Redis來執行此操作,則可以使用EXPIRE命令指定您希望存在多長時間(在此情況下爲您的日期)。這裏有個大概的想法:

public function yourMethod() 
{ 
    $date = $this->getDate(); 

    /* ... */ 
} 

protected function getDate() 
{ 
    /** @var $redis \Predis\Client */ 
    $redis = $this->container->get('snc_redis.default'); // TODO inject as a dependency 

    $date = $redis->get('your_key'); 

    // Will be empty if requested after the key has expired. 
    // Set a new date value in the key 
    if (empty($date)) { 
     $date = '2013-01-17 13:30:00'; // Not sure where you want to get this from 
     $redis->set('your_key', $date); 

     $secondsToLive = 259200; // 3 days 
     $redis->expire('your_key', $secondsToLive); 
    } 

    return $date; 
} 
+0

問題在於數據將保存在內存中,我不想要。我可能最終根本沒有訪問數據,但我需要它在那裏幾天,以防萬一。我應該指定。 – ChocoDeveloper

+0

Offtopic:我通常避免使用'php'標籤來避免誰試圖回答非常具體或困難的symfony2問題,而沒有使用過框架的分數妓女。他們不會放棄,如果你不接受答案,他們甚至最終會低估你。這很煩人。在這種情況下,我正要使用php標籤,並不確定。謝謝你。 – ChocoDeveloper

+0

好吧,不用擔心。是的,我知道你對'php'標記的含義,但是我發現如果我在上面發佈了代碼片段,總是很方便。 – RobMasters

相關問題