我想运行一些函数,这些函数可以更改记录的状态,并在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小时的过期票证。但这只有在有人访问该网站时才会运行。它可以自动每晚午夜运行吗?
答案 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);
}
现在,您可以轻松地在蛋糕壳中重复使用此方法。