00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00018 final class DirectoryLocker extends BaseLocker
00019 {
00020 private $directory = null;
00021
00022 public function __construct($directory = 'dir-locking/')
00023 {
00024 $this->directory = ONPHP_TEMP_PATH.$directory;
00025
00026 if (!is_writable($this->directory)) {
00027 if (!mkdir($this->directory, 0700, true)) {
00028 throw new WrongArgumentException(
00029 "can not write to '{$directory}'"
00030 );
00031 }
00032 }
00033 }
00034
00035 public function get($key)
00036 {
00037 $mseconds = 0;
00038
00039 while ($mseconds < 10000) {
00040 try {
00041 mkdir($this->directory.$key, 0700, false);
00042 return $this->pool[$key] = true;
00043 } catch (BaseException $e) {
00044
00045 $mseconds += 200;
00046 usleep(200);
00047 }
00048 }
00049
00050 return false;
00051 }
00052
00053 public function free($key)
00054 {
00055 try {
00056 return rmdir($this->directory.$key);
00057 } catch (BaseException $e) {
00058 return false;
00059 }
00060 }
00061
00062 public function drop($key)
00063 {
00064 return $this->free($key);
00065 }
00066 }
00067 ?>