0

我正在编写 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!

如何防止显示?谢谢

4

1 回答 1

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% 确定您需要使用控制台命令。stat大多数基于文件的控制台命令( 、file_exists、等)都有 PHP 等效项,is_dir它们可以使您的代码更加安全使其独立于平台。

于 2013-03-05T11:23:27.180 回答