我在哪里可以在Symfony2中存储tmp文件?

时间:2013-01-17 10:47:55

标签: php symfony

我读到我可以使用app / cache或app / logs来获取tmp文件,但它感觉不对,因为除非我自己这样做,否则它们不会被删除。

例如,我需要在文件中存储日期(我不想为此使用数据库),我只需要在那里工作2到3天。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

让Web服务器在bundle中写入不是一个好习惯。你可以这样做,但你必须处理权限,它会带来安全风险......

为什么不使用经常清理的/ tmp(在UNIX服务器上)或者你自己的tmp目录如/ home / ChocoDeveloper / tmp和cron任务来清理它?

答案 1 :(得分: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;
}