PageRenderTime 45ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/priv/portloop.php

http://github.com/treetopllc/ephp
PHP | 76 lines | 65 code | 7 blank | 4 comment | 8 complexity | 63d27fd4e6b8730285b53967bd18e3b6 MD5 | raw file
  1. ini_set('track_errors',true);
  2. ini_set('display_errors', 0);
  3. function varvar($str){
  4. if(strpos($str,'->') !== false){
  5. // Accessing object property
  6. $parts = explode('->',$str);
  7. global ${$parts[0]};
  8. return ${$parts[0]}->$parts[1];
  9. }elseif(strpos($str,'[') !== false && strpos($str,']') !== false){
  10. $parts = explode('[',$str);
  11. global ${$parts[0]};
  12. $parts[1] = substr($parts[1],0,strlen($parts[1])-1);
  13. return ${$parts[0]}[$parts[1]];
  14. }else{
  15. global ${$str};
  16. return ${$str};
  17. }
  18. }
  19. // message erlang to tell it things are ok to continue
  20. $rstr = 'ok';
  21. fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
  22. do{
  23. ob_start();
  24. @trigger_error('');
  25. $sizestr = fread(STDIN, 4);
  26. if(strlen($sizestr) == 0) {
  27. //eof, exit because erlang has exited
  28. exit;
  29. }
  30. $sizearr = unpack('N',$sizestr);
  31. $size = array_pop($sizearr);
  32. $raw_cmd = fread(STDIN, $size);
  33. if(empty($raw_cmd)) {
  34. //eof, exit because erlang has exited
  35. exit;
  36. }
  37. $cmd = json_decode($raw_cmd, true);
  38. $result = null;
  39. if(empty($cmd)) {
  40. continue;
  41. }
  42. $cmd_str = var_export($cmd, true);
  43. switch($cmd[0]) {
  44. case 'stop':
  45. exit;
  46. case 'call':
  47. $fn = $cmd[1];
  48. $args = $cmd[2];
  49. $result = call_user_func_array($fn, $args);
  50. break;
  51. case 'call_method':
  52. $obj = varvar($cmd[1]);
  53. $fn = $cmd[2];
  54. $args = $cmd[3];
  55. $result = call_user_func_array(array($obj, $fn), $args);
  56. break;
  57. }
  58. if(!empty($php_errormsg)) {
  59. $rstr = json_encode(array('error', error_get_last()));
  60. $rstr = str_replace("\/","/",$rstr);
  61. fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
  62. exit;
  63. } else {
  64. $rstr = json_encode(array('ok', $result));
  65. $rstr = str_replace("\/","/",$rstr);
  66. fwrite(STDOUT,pack('N',strlen($rstr)).$rstr);
  67. }
  68. } while(!empty($raw_cmd));
  69. exit;