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); }