http://fztree.iteye.com/blog/2211746
在这篇文章里,我写了一个php脚本,用来定时关闭未付款的订单。
考虑到脚本的可扩展性
我简单封装了一个worker类
具体的执行类是CloseTradeWorker
配置文件config
日志写在/var/log/etz-dev/
先看配置文件
<?php return array( 'database' => array( 'host' => "localhost", 'username' => "root", 'password' => "123456", 'database' => "etz1", ), # log 路径 # 'log' => '/var/log/etz-dev/', );
然后是CloseTradeWorker
<?php require(dirname(__FILE__).'/../Worker.php'); class CloseTradeWorker extends Worker{ public function exec(){ $this->std_echo('CloseTradeWorker Start...'); // sql $add_time = time() - 5*60; $sql = ' UPDATE etz_borrow_investor'. ' SET close_time = add_time + 300, status = 8'. ' WHERE close_time = 0 AND status = 7'. ' AND add_time <'.$add_time; // 连接数据库 $this->init_mysql_connetion(); // 执行sql $step = mysql_query($sql, $this->db_con); if (false === $step) $this->std_echo ('CloseTradeWorker Failed: '.mysql_error() ); else $this->std_echo ('CloseTradeWorker Successfully executed.'); // 关闭连接 $this->halt_mysql_connetion(); } protected function std_echo($words){ $cfg = require(dirname(__FILE__).'/../config.php'); $dir = $cfg['log'].'close_trade/'; /* * sudo mkdir /var/log/etz-dev/close_trade * sudo chmod -R 777 /var/log/etz-dev/close_trade */ $file = $dir.date('Y-m-d').'_close_trade.log'; $content = date('Y-m-d H:m:s')."\t".$words."\n"; file_put_contents($file, $content, FILE_APPEND); parent::std_echo($words); } } ##### Worker ##### $worker = new CloseTradeWorker(); $worker->exec(); exit;
最后是基类
<?php abstract class Worker{ abstract function exec(); ########## db访问 相关代码 ######################################################## /* db connection */ protected $db_con; protected function init_mysql_connetion(){ $cfg = require(dirname(__FILE__).'/config.php'); $cfg = $cfg['database']; $this->db_con = mysql_connect($cfg['host'], $cfg['username'], $cfg['password'] ); if (!$this->db_con){ $this->std_echo('Could not connect: '.mysql_error() ); exit; } mysql_select_db($cfg['database'], $this->db_con); } protected function halt_mysql_connetion(){ mysql_close($this->db_con); } ######################################## protected function std_echo($words){ echo date('Y-m-d H:m:s')."\t".$words."\n"; } }
终于,我觉得这样的层次能足够满足需求和未来的可扩展性了。