我在两个 ubuntu 16.04 上运行 PHP 7.0.22,在 LAMP 下。
当我打开外壳并键入时
ls -1 /var/www/dropbox/*.[Cc][Ee][Ll] >
它会创建一个文件/var/www/dropbox/temp.lst,列出/var/www/dropbox 中以 .cel 或 结尾的所有文件。嘟嘟。
但是,当我运行包含
$str="ls -1 /var/www/dropbox/*.[Cc][Ee][Ll] >/var/www/dropbox/temp.lst";
exec($str);
我没有创建/var/www/dropbox/temp.lst 并且/var/log/apache2/error.log 包含错误消息
ls: cannot access '/var/www/dropbox/*.[Cc][Ee][Ll]': No such file or directory
编辑 1:
$str="ls -1 /var/www/dropbox/*.[Cc][Ee][Ll]";
$results = explode(PHP_EOL, shell_exec($str));
print_r($results);
echo "<br>";
返回
Array ( [0] => )
你需要shell_exec()
,而不是exec()
。 您还应该使用egrep
.即,ls | egrep '*.CEL|*.cel'
尝试使用shell_exec($str)
。这将解决这个问题。
exec()
执行外部程序。shell_exec()
通过 shell 执行命令,并以字符串形式返回完整的输出
它将以字符串形式返回结果。
<?php
$command = "ls | egrep '*.CEL|*.cel'";
$results = explode(PHP_EOL, shell_exec($command));
print_r($results);
?>
结果应如下所示
Array
(
[0] => luminol.cel
[1] => luminol.CEL
[2] =>
)
来源:
http://php.net/manual/en/function.shell-exec.php
http://php.net/manual/en/function.exec.php