20 if(!$this->_path)
throw new \Exception(
'No path set');
21 if(!is_scalar($id) || !preg_match(
'/^\\w+$/',$id))
throw new \Exception(
'Invalid ID');
26 file_put_contents($this->
filename($id),func_num_args() > 1 ? serialize($result) :
null);
30 $result = unserialize(file_get_contents($filename = $this->
filename($id)));
31 \Rsi\File::unlink($filename);
35 public function worker($id,$component_name,$func_name,$params =
null){
37 if(is_string($component_name) && is_string($func_name))
try{
38 $result[
'result'] = call_user_func_array([$this->
component($component_name),$func_name],is_array($params) ? $params : []);
42 'error' => $e->getMessage(),
43 'filename' => $e->getFile(),
44 'lineNo' => $e->getLine(),
45 'trace' => $e->getTrace()
58 public function execute($component_name,$func_name,$params =
null){
59 if(!is_string($component_name) || !is_string($func_name))
return false;
61 \Rsi::executeParallel(escapeshellarg(PHP_BINARY) .
' -r ' . escapeshellarg(
63 $this->_fredVar .
'->component(' . var_export($this->_name,
true) .
')->worker(' .
64 var_export($id,
true) .
',' . var_export($component_name,
true) .
',' . var_export($func_name,
true) .
65 (is_array($params) ?
',' . var_export(array_values($params),
true) :
'') .
73 if($this->_path)
foreach((
new \GlobIterator($this->_path .
'*' . $this->_ext)) as $filename => $file)
try{
74 if($file->getMTime() < $time) unlink($filename);
88 clearstatcache(
false,$filename = $this->
filename($id));
89 if(!filesize($filename)){
90 if(!rand(0,$this->garbageChance)) $this->
garbage();
102 if(array_key_exists(
'result',$result = $this->
readResult($id)))
return $result[
'result'];
103 $this->lastError = $result;
104 throw new \Exception($result[
'error'] ??
'Empty result');