'; if ($ret == false) { echo 'chdir: unable to change directories: `'.$dir."'\n"; return $ret; } abstract class prog { public static abstract function main($args, $env); } function lts_shell_exec($com, $env) { if ($env['CWD'] != '') { lts_chdir($env['CWD']); } if ($com=='') { return 0; } $coms = array(); $stdout_dest = array(); // Parse command(s) $a = 0; $c = 0; $q = ''; while ($com != '') { $char = substr($com,0,1); $com = substr($com,1); if (substr_count ('\'',$char)!==0) { if (substr($q,0,1)===$char) { $q = substr($q,1); } else { $q = $char.$q; } } elseif ($q != '') { $coms[$c][$a].=$char; } elseif (substr_count ($env['IFS'],$char)!==0) { if (isset($coms[$c][$a])) { $a++; } } elseif ($char==';') { if (!isset($stdout_dest[$c])) { $stdout_dest[$c] = '/dev/stdout'; } $c++; $a=0; } elseif ($char=='|') { $stdout_dest[$c] = '/dev/stdin'; $c++; $a=0; } else { $coms[$c][$a].=$char; } } if (!isset($stdout_dest[$c])) { $stdout_dest[$c] = '/dev/stdout'; } // execude commands $ret=0; foreach ($coms as $key => $args) { if ($stdout_dest[$key] != '/dev/stdout') { ob_start(); } lts_exec($args, $env); if ($stdout_dest[$key] == '/dev/stdout') { unset($_POST['stdin']); } else { switch ($stdout_dest[$key]) { case '/dev/stdin': $_POST['stdin']=ob_get_contents(); break; default: file_put_contents($stdout_dest[$key],ob_get_contents()); break; } ob_end_clean(); } } return $ret; } function lts_exec($args, $env) { if (!class_exists('p_'.$args[0])) { $file=$env['PATH'].'/'.$args[0].'.php'; if (file_exists($file)) { include($file); } } if (class_exists('p_'.$args[0])) { $ret = call_user_func(array('p_'.$args[0],'main'),$args,$env); } else { echo 'lts_exec: command not found: `'.$args[0]."'\n"; $ret = 1; } return $ret; }