CakePHP:无人访问网站时运行一个功能

时间:2012-10-14 12:46:22

标签: php cakephp

我想运行一些函数,这些函数可以更改记录的状态,并在CakePHP中删除数据库中的过期记录。例如。每24小时一次。

显而易见的问题是运行一个功能需要我知道有人实际访问该网站。是否可以在没有用户访问网站的情况下自动运行功能以使代码运行?

例如,我有以下代码:

function garbage() 
    {         
        $deadline = date('Y-m-d H:i:s', time() - (24 * 60 * 60)); // keep tickets for 24h. 
        $ticketObj = new Ticket(); 
        $data = $ticketObj->query('DELETE from tickets WHERE created < \''.$deadline.'\''); 
    } 

这将删除超过24小时的过期票证。但这只有在有人访问该网站时才会运行。它可以自动每晚午夜运行吗?

3 个答案:

答案 0 :(得分:2)

您需要设置一个cronjob。

以下是有关如何操作的良好指南:http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

答案 1 :(得分:2)

您可以将代码编写为CakePHP Console application,并将其作为cronjobs运行。

答案 2 :(得分:1)

是的,它应该作为一个cron工作完成。

就蛋糕而言,你应该在模型中使用一个方法并通过shell调用它。 http://book.cakephp.org/2.0/en/console-and-shells.html

此外,你在问题中的例子不是很像蛋糕。 例如,您应该避免使用query()方法。

这样的事情会更好(这假设你有一个Ticket模型):

<?php 
class Ticket extends AppModel

public function garbage($deadline = null) {
    //http://book.cakephp.org/2.0/en/models/deleting-data.html#deleteall
    $this->deleteAll(array($this->alias . 'created <' => $deadline), false);
}

现在,您可以轻松地在蛋糕壳中重复使用此方法。