2013年10月28日月曜日

Yiiでファイルを読み書きするならcfileエクステンションが便利

掲示板の新着投稿をお知らせするTwitterBotを作ってみました。TwitterAPIのレスポンスが遅いので書き込むたびにツイートするのではなく、30分おきに新着投稿の有無をチェックしてあればつぶやくというものです。

具体的には、ひとつフラグを用意して、掲示板で投稿するたびにフラグを立てる、30分おきにそのフラグをチェックしてフラグが立っていたらツイートしてフラグを下げる、という感じでやってます。

このフラグをわざわざDBで管理することないよなぁと思ってファイルで管理することにしました。Yiiでファイルの読み書きってどうやるんだろうってググった結果、cfileなるエクステンションを見つけました。

cfile | Extension | Yii PHP Framework

読み書きのしかた、はまった点をざっくりメモ


ルートディレクトリ直下にfilesというディレクトリを作成してflag.datを作成。

$file=Yii::app()->file->set('files/flag.dat');

// 読み
$flag = $file->contents;

// 書き
$file->contents='hoge';

これだけです。マジックメソッドでいろいろやってくれてるみたいでとてもシンプルに書けます。

はまったのはファイルのパスの指定。cronで実行するとrealpathがroot/filesではなく、root/protected/filesになってました。

なのでパスの指定を
$file=Yii::app()->file->set(dirname(__FILE__) . '/../../files/flag.dat');
こうしてみたところうまいこといきました。

0 件のコメント :

コメントを投稿