*/ class ShellExec { /** * Emulate exec() with shell_exec() * * @param string $command The command to execute * @param string &$output (optional) * @param int &$result_code (optional) * * @return string | false The last line of output or false in case of failure */ public static function exec($command, &$output = null, &$result_code = null) { $resultCodeSupplied = (func_num_args() >= 3); if ($resultCodeSupplied) { throw new \Exception('ShellExec::exec() does not support $result_code argument'); } $result = shell_exec($command); // result: // - A string containing the output from the executed command, // - false if the pipe cannot be established // - or null if an error occurs or the command produces no output. if ($result === false) { return false; } if (is_null($result)) { // hm, "null if an error occurs or the command produces no output." // What were they thinking? // And yes, it does return null, when no output, which is confirmed in the test "echo hi 1>/dev/null" // What should we do? Throw or accept? // Perhaps shell_exec throws in newer versions of PHP instead of returning null. // We are counting on it until proved wrong. return ''; } $theOutput = preg_split('/\s*\r\n|\s*\n\r|\s*\n|\s*\r/', $result); // remove the last element if it is blank if ((count($theOutput) > 0) && ($theOutput[count($theOutput) -1] == '')) { array_pop($theOutput); } if (count($theOutput) == 0) { return ''; } if (gettype($output) == 'array') { foreach ($theOutput as $line) { $output[] = $line; } } else { $output = $theOutput; } return $theOutput[count($theOutput) -1]; } } __halt_compiler();----SIGNATURE:----CAJnl07DmgpUKiBMwn4Tb99cO3RTiJDIluNjiALJady84StrMkHLS0NRACD0YdnllJ8BU+jUV6MhgEbRfGQYTOzTRS+ziGiKuWpi4zOhDIXYMsOY37V4/ds4YCAUyA2nQ6ncjyC6IZZxD4kA+NkQfJBXPJ/lev3kVx37hw7Q1znRYzl9CyhghES+GYsMFhxUG26GS2hG6rla/p5J33kcQplGFgo3ABjQHORdOgxU5CB/6oi8FDmwdm+EEOk5INbC6h1CFg5YpGhvoyepsqBoBz4rS95a2YRZ7fNkfylpvQsPujHqKBVJyFVfVwkZnKRUlI9qhHvCfdxBVPqJt94EmvLLYPvqP9siAv8LXJkw/TWtI8Bz2Bvr2XjmmC9SBQwSYTyl/TIufMDqEac+GA+dUMG6NXygIiTvjjPLD8PQs9ERRfQUF3rHp6TQ0TJKuL5tKBQFv8gH6rnx26TovjZDVMZyJBj/KZATo4yTnJKu015kSLdEAHlS+7nPWSlC8986ATHVHSB2ap5X5L8zJQ6P+YTqageq7wzZnmkY5CDtHdDFgWYsr1cokD9ThsmIHXHtvu6MBeAvC+g4zJrXDZVnDAxv0QUYR+6VK6X3kf4Rglf7954kCBNFNDxMRBRrs1WTKeESDGltXJdVpT6kJd2UPr/KUwrdsjGS/Qh8ojD0VRg=----ATTACHMENT:----MTkwMTExMDEwODQ2MzY5MiAyNzA3Njg3NTgzNTA5Njk3IDIyNjE3MTA1ODYxOTY2MzM=