Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class task
- {
- public $handler = ''; //обработчик задачи
- public $query = ''; //задача
- public $params = ''; //дополнительные параметры
- public $priority = 1; //приоритет
- public $filename=''; //имя файла задачи
- public function __construct($query, $handler = '', $priority = 1, $params = '')
- {
- $this->query = $query;
- $this->priority = intval($priority);
- if (!empty($handler)) $this->handler = $handler;
- if (!empty($params)) $this->params = $params;
- return true;
- }
- }
- class tasks
- {
- ################################################################################
- #### Внимание, здесь требуется настройка - укажите существующую директорию ####
- ################################################################################
- const tpath = '/home/user/tmpdir/'; //директория для временных файлов
- public static function create($query, $handler = '', $priority = 1, $params = '')
- {
- if (empty($query)) return false;
- $task=new task($query,$handler,$priority,$params);
- if (self::add($task)) return $task;
- else return false;
- }
- public static function add(&$task)
- {
- if (!($task instanceof task)) return false;
- if (empty($task->query)) return false;
- return self::write_task_to_file($task);
- }
- public static function del(&$task)
- {
- if (!empty($task->filename) && file_exists(self::tpath.$task->filename)) return unlink(self::tpath.$task->filename);
- return false;
- }
- public static function update(&$task)
- {
- if (!($task instanceof task)) return false;
- return self::write_task_to_file($task);
- }
- public static function execute(&$task)
- {
- if (!($task instanceof task)) return false;
- if (empty($task->handler)) return false;
- if (!file_exists(self::tpath.$task->filename)) return false;
- if (method_exists('task_handlers',$task->handler))
- {
- $handler=$task->handler;
- $r=task_handlers::$handler($task);
- self::del($task);
- return $r;
- }
- return false;
- }
- public static function get_files_list()
- {
- if (!file_exists(self::tpath)) return false;
- $files = array();
- $dh = opendir(self::tpath);
- while (($f = readdir($dh)) !== false)
- {
- if (is_file(self::tpath.$f) && $f != '..' && $f != '.' && substr($f,-5)=='.task') $files[]=$f;
- }
- return $files;
- }
- public static function get_tasks()
- {
- if (!file_exists(self::tpath)) return false;
- $files=self::get_files_list();
- if (empty($files)) return false;
- $tasks = array();
- foreach ($files as $f)
- {
- $newtask = self::read_task_from_file($f);
- if (!empty($newtask->query)) $tasks[$f] = $newtask;
- unset($newtask);
- }
- return $tasks;
- }
- public static function read_task_from_file($f)
- {
- if (empty($f) || !is_string($f) || !file_exists(self::tpath.$f)) return false;
- $content = @file_get_contents(self::tpath.$f);
- if (empty($content)) return false;
- $d = explode("\n", $content);
- $task=new task(base64_decode($d[0]));
- if (!empty($d[1])) $task->handler = base64_decode($d[1]);
- if (!empty($d[2])) $task->priority = intval($d[2]);
- if (!empty($d[3])) $task->params = unserialize(base64_decode($d[3]));
- $task->filename=$f;
- return $task;
- }
- public static function write_task_to_file(&$task)
- {
- if (!($task instanceof task)) return false;
- if (empty($task->filename)) $task->filename = self::get_new_filename();
- $f=$task->filename;
- $fh=fopen(self::tpath.$f,'wb');
- if (!$fh) return false;
- if (!flock($fh,LOCK_EX)) return false;
- fwrite($fh,base64_encode($task->query)."\n");
- if (!empty($task->handler)) fwrite($fh,base64_encode($task->handler)."\n");
- if (!empty($task->priority)) fwrite($fh,intval($task->priority)."\n");
- if (!empty($task->params)) fwrite($fh,base64_encode(serialize($task->params))."\n");
- flock($fh,LOCK_UN);
- fclose($fh);
- return $f;
- }
- public static function get_new_filename()
- {
- $name=$t=round(microtime(1)*1000);
- $i=0;
- while (file_exists(self::tpath.$name.'.task'))
- {
- $i++;
- $name=$t.'_'.$i;
- }
- return $name.'.task';
- }
- }
- class task_handlers
- {
- #############################################################
- ####### Эти функции-обработчики приведены для примера #######
- #############################################################
- public function mysql(&$task)
- {
- if (class_exists('mysql'))
- {
- if (!mysql::$connected) mysql::connect();
- return mysql::query($task->query);
- }
- else return mysql_query($task->query);
- }
- public function mail(&$task)
- {
- if (function_exists('mailsend')) return mailsend($task->params['to'],$task->params['subject'],$task->params['message'],
- $task->params['headers'],$task->params['parameters'],$task->params['immediately']);
- else return mail($task->params['to'],$task->params['subject'],$task->params['message'],$task->params['headers'],$task->params['parameters']);
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement