不区分大小写的 shell 命令不适用于 PHP 可执行文件



我在两个 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

最新更新