|
- <?php
-
- class Queue {
- function __construct($key) { global $config;
- if ($config['queue']['enabled'] == 'fs') {
- $this->lock = new Lock($key);
- $key = str_replace('/', '::', $key);
- $key = str_replace("\0", '', $key);
- $this->key = "tmp/queue/$key/";
- }
- }
-
- function push($str) { global $config;
- if ($config['queue']['enabled'] == 'fs') {
- $this->lock->get_ex();
- file_put_contents($this->key.microtime(true), $str);
- $this->lock->free();
- }
- return $this;
- }
-
- function pop($n = 1) { global $config;
- if ($config['queue']['enabled'] == 'fs') {
- $this->lock->get_ex();
- $dir = opendir($this->key);
- $paths = array();
- while ($n > 0) {
- $path = readdir($dir);
- if ($path === FALSE) break;
- elseif ($path == '.' || $path == '..') continue;
- else { $paths[] = $path; $n--; }
- }
- $out = array();
- foreach ($paths as $v) {
- $out []= file_get_contents($this->key.$v);
- unlink($this->key.$v);
- }
- $this->lock->free();
- return $out;
- }
- }
- }
-
- // Don't use the constructor. Use the get_queue function.
- $queues = array();
-
- function get_queue($name) { global $queues;
- return $queues[$name] = isset ($queues[$name]) ? $queues[$name] : new Queue($name);
- }
|