0

我想在我的 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 小时的过期票证。但这仅在有人访问该网站时运行。它可以在每晚午夜自动运行吗?

4

3 回答 3

2

您需要设置一个 cronjob。

这是一个很好的指南:http: //net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

于 2012-10-14T12:50:04.170 回答
2

您可以将代码编写为CakePHP 控制台应用程序,并将其作为cronjobs运行。

于 2012-10-14T12:50:56.897 回答
1

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

就蛋糕而言,您应该在模型中使用一个方法并通过外壳调用它。 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);
}

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

于 2012-10-14T12:55:33.350 回答