/priv/portloop.php
PHP | 76 lines | 65 code | 7 blank | 4 comment | 8 complexity | 63d27fd4e6b8730285b53967bd18e3b6 MD5 | raw file
- ini_set('track_errors',true);
- ini_set('display_errors', 0);
- function varvar($str){
- if(strpos($str,'->') !== false){
- // Accessing object property
- $parts = explode('->',$str);
- global ${$parts[0]};
- return ${$parts[0]}->$parts[1];
- }elseif(strpos($str,'[') !== false && strpos($str,']') !== false){
- $parts = explode('[',$str);
- global ${$parts[0]};
- $parts[1] = substr($parts[1],0,strlen($parts[1])-1);
- return ${$parts[0]}[$parts[1]];
- }else{
- global ${$str};
- return ${$str};
- }
- }
- // message erlang to tell it things are ok to continue
- $rstr = 'ok';
- fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
- do{
- ob_start();
- @trigger_error('');
- $sizestr = fread(STDIN, 4);
- if(strlen($sizestr) == 0) {
- //eof, exit because erlang has exited
- exit;
- }
- $sizearr = unpack('N',$sizestr);
- $size = array_pop($sizearr);
- $raw_cmd = fread(STDIN, $size);
- if(empty($raw_cmd)) {
- //eof, exit because erlang has exited
- exit;
- }
- $cmd = json_decode($raw_cmd, true);
- $result = null;
- if(empty($cmd)) {
- continue;
- }
- $cmd_str = var_export($cmd, true);
- switch($cmd[0]) {
- case 'stop':
- exit;
- case 'call':
- $fn = $cmd[1];
- $args = $cmd[2];
- $result = call_user_func_array($fn, $args);
- break;
- case 'call_method':
- $obj = varvar($cmd[1]);
- $fn = $cmd[2];
- $args = $cmd[3];
- $result = call_user_func_array(array($obj, $fn), $args);
- break;
- }
- if(!empty($php_errormsg)) {
- $rstr = json_encode(array('error', error_get_last()));
- $rstr = str_replace("\/","/",$rstr);
- fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
- exit;
- } else {
- $rstr = json_encode(array('ok', $result));
- $rstr = str_replace("\/","/",$rstr);
- fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
- }
- } while(!empty($raw_cmd));
- exit;