0

CakePHP のデータベースで、レコードのステータスの変更や期限切れのレコードの削除などを行ういくつかの機能を実行したいと考えています。たとえば、24 時間ごと。

明らかな問題は、私の知る限り、誰かが実際に Web サイトにアクセスする必要がある機能を実行することです。コードを実行するために Web サイトにアクセスするユーザーがいなくても、関数を自動的に実行することは可能ですか?

たとえば、次のコードがあります。

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 時間以上経過した期限切れのチケットが削除されます。ただし、これは誰かが Web サイトにアクセスしている場合にのみ実行されます。毎晩深夜に自動的に実行できますか?

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 ジョブとして実行する必要があります。

Cake に関する限り、モデルでメソッドを使用し、シェル経由で呼び出す必要があります。 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 に答える