phpでもflymakeしたい!
夜中に作業してたら%PHPStudyでhaltさんが勢いでこんなものを作ってしまったところに遭遇したので、ためしに使ってみた。
これいいなーとおもって、
01:45:09 (halt) で、正直CLIの引数とかリダイレクトとか、arg周りって超ニガテ分野なので 01:45:19 (halt) 誰かまじめにつくってくれwwww
ようしぱぱがんばっちゃうぞ!
ってことで(違)CLI処理をefm_perl.plにできるだけ近くしてみた。
え?求められてたことはそれじゃない?気にしたら負けだと思っている。
#!/usr/local/bin/php <?php function usage() { global $command; $usage = "Usage: $command [-c] [-f <errorfile>] <programfile> [programargs] -c compile only, don't run (executes 'php -l') -f write errors to <errorfile> -h, --help show this help Examples: * At the command line: $command program.php Displays output on STDOUT. $command -c -f errorfile program.php Then run 'vim -q errorfile' to edit the errors with Vim. * In Vim: Edit in Vim (and save, if you don't have autowrite on), then type ':mak' or ':mak args' (args being the program arguments) to error check." . PHP_EOL; echo $usage; } $command = array_shift($argv); if (count($argv) < 2) { usage(); exit(0); } $filename = null; $option = ''; $error_file = null; while ($arg = array_shift($argv)) { if ('-' !== substr($arg, 0, 1)) { if (!is_null($filename)) { echo $command . ': too many programfile parameter' . PHP_EOL; exit(1); } $filename = $arg; continue; } switch ($arg) { case '-c': $option = '-l '; break; case '-f': $error_file = array_shift($argv); break; case '-h': case '--help': default: usage(); exit(0); } } if (!file_exists($filename)) { echo $command . ': ' . $filename . ' does not exist' . PHP_EOL; exit(1); } if (ob_get_level() !== 0) { ob_end_clean(); } $cmd = 'php '.$option.escapeshellarg($filename). ' 2>&1'; if ((exec($cmd, $output, $status) !== false) && ($status !== 0)) { ob_start(); foreach ($output as $part) { if (preg_match('/^.*?:(.*?) in (.*?) on line (\d+)/', $part, $matches)) { $matches = array_map('trim', $matches); $message = $matches[1]; $file = $matches[2]; $lineno = $matches[3]; echo "{$file}:{$lineno}:{$message}" . PHP_EOL; } } if (!is_null($error_file)){ file_put_contents($error_file, ob_get_contents()); } ob_end_flush(); }
haltさんのよりさらにやっつけ度が上がってる点に突っ込みたい場合は、オブラートに包んでください。泣いちゃいます。
CodeReposのアカウントは今申請中でcommitできなかったのでとりあえず貼り付け。
ふぅ。。。仕事しないとw