levis: PHP Framework

PHP4とPHP5に対応した、軽量なフレームワークです。

フレームワーク本体

旧バージョン

記事管理プログラム

フレームワークの使用例として作成したもの。

設置方法

名簿管理プログラム

実用的なプログラムの土台用に作成したもの。

設置方法

セキュリティ対策

.htaccess などで以下を設定することを推奨します。

試作中のツール

Cronの集中管理

Cronの実行タイミングをプログラムで管理する例です。

解凍すると作成される cron.php をプラグインとして配置します。(libs/plugins/cron.php など。)

通常の手順で、cronで実行するためのプログラムを作成します。(task/check_update.php など。)

一例ですが task/main.php を作成し、以下の内容を記述します。

<?php

if (!defined('MAIN_PATH')) {
    define('MAIN_PATH', '/var/www/html/test/levis/');
}
require_once MAIN_PATH . 'libs/cores/loader.php';

import('libs/plugins/cron.php');

cron_exec('* * * * *', 'task/check_update.php');
cron_exec('*/5 * * * *', 'task/test1.php');
cron_exec('*/10 * * * *', 'task/test2.php');

この task/main.php のみを、毎分実行されるようにcronに登録します。

* * * * * apache /usr/bin/php /var/www/levis/task/main.php

これで task/main.php 内の以下の部分で、プログラムの実行タイミングを制御できます。

cron_exec('実行タイミング', '実行対象');

これにより、cronの設定は最初に一度だけで、以降はすべてプログラム内で実行タイミングも管理できるようになります。実行タイミングをgitの管理対象にすることも容易です。

今回の場合 task/check_update.php は毎分、task/test1.php は5分ごと、task/test2.php は10分ごとに実行されます。

※1プロセスの負荷が大きくなるので、あまり重い処理の管理には向きません。また処理が止まってしまった場合、以降の処理もすべて実行されませんので注意が必要です。

メールの大量送信

メールの一斉大量送信に耐えるために、キューから少しずつ送信する例です。

あらかじめ以下のテーブルを作成しておきます。ここに格納されたデータは、送信対象のメールとみなされます。

#キュー
CREATE TABLE IF NOT EXISTS queues(
    id        BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    created   DATETIME        NOT NULL                COMMENT '作成日時',
    modified  DATETIME        NOT NULL                COMMENT '更新日時',
    deleted   DATETIME                                COMMENT '削除日時',
    sent      DATETIME                                COMMENT '送信完了日時',
    failed    INT UNSIGNED    NOT NULL                COMMENT '送信失敗回数',
    mailto    TEXT            NOT NULL                COMMENT '送信先',
    subject   VARCHAR(255)    NOT NULL                COMMENT '件名',
    message   TEXT            NOT NULL                COMMENT '本文',
    header    TEXT                                    COMMENT 'ヘッダ',
    parameter VARCHAR(255)                            COMMENT 'パラメータ',
    PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'キュー';

以下のプログラムで、メールがキューに格納されます。

service_queue_push('送信先アドレス', '件名', '本文');

以下のプログラムで、キュー内のメールが送信されます。

service_queue_send(送信する件数);

つまり、メールを送信したいタイミングで service_queue_push() を実行します。service_queue_send() はCronで定期的に実行し、例えば「1分間に10通ずつ」のように送信するようにします。

※プログラム上問題はなくても、サーバの規約などで1時間に送信できるメールの件数などが制限されていることがあるので、注意が必要です。

プログラムとテストの自動作成

フレームワーク標準実装のものよりも、高機能なScaffoldです。

解凍すると作成される scaffold.php をコントローラとして配置します。(app/controllers/tool/scaffold.php など。)

index.php/tool/scaffold のようにアクセスすると、自動作成のための画面が表示されます。

コードカバレッジの表示

単体テストの際、テストの網羅率を表示します。解説作成中。

プログラムとテストの自動作成

Selenium風の自動テストを行います。シナリオはJavaScriptで作成します。解説作成中。

Copyright © 2002-2017 refirio.org, All rights reserved.