来自unix命令的PHP CLI错误

时间:2013-03-05 11:10:53

标签: php shell unix exec command-line-interface

我正在编写php脚本,用于从“标准”网站制作网站。 有很多unix shell命令,我发现显示错误的问题。

示例:我需要检查网站文件夹是否尚不存在。

$ls_newsite = exec('ls /vhosts/'.$sitename, $output, $error_code);
if ($error_code == 0) {
    Shell::error('This site already exists in /vhosts/');
}
Shell::output(sprintf("%'.-37s",$sitename).'OK!');

所以,我可以处理错误,但无论如何都会显示错误。

php shell.php testing.com

Checking site...
ls: cannot access /vhosts/testing.com: No such file or directory
testing.com.................................OK!

如何阻止显示?感谢

1 个答案:

答案 0 :(得分:1)

您不需要这些CLI调用的输出,只需要错误代码。因此,将输出定向到/dev/null(否则PHP将打印除stderr之外的任何内容,除非您使用proc_open并为每个创建管道 - 过度杀伤。“

$ls_newsite = exec('ls /vhosts/' . $sitename . ' > /dev/null 2>&1', $output, $error_code);

这样可以在不给你任何输出的情况下工作。

现在,还有一些其他问题:

escapeshellarg用于传递给shell命令的任何内容。 编写相同代码的更好方法是:

$ls_newsite = exec(sprintf('ls %s > /dev/null 2>&1', escapeshellarg('/vhosts/' . $sitename)), $output, $error_code);

100%确定您需要使用控制台命令。大多数基于文件的控制台命令都有PHP等价物(statfile_exists,{{1}等等,使你的代码更加安全将使它与平台无关。