不区分大小写 Shell 命令不适用于 PHP Exec

Case Insensitive Shell Command Not Working With PHP Exec

我运行宁PHP7.0.22,下LAMP,两个ubuntu16.04.

当我打开 shell 并输入

ls -1 /var/www/dropbox/*.[Cc][Ee][Ll] >

它创建一个文件 /var/www/dropbox/temp.lst,列出 /var/www/dropbox 中以 .cel 或 .CEL 结尾的所有文件。

但是,当我 运行 PHP 代码包含

    $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>";

returns

Array ( [0] => ) 

您需要 shell_exec(),而不是 exec()。您还应该使用 egrep。即,ls | egrep '*.CEL|*.cel' 尝试使用 shell_exec($str)。这将解决这个问题。

exec() 执行外部程序。
shell_exec() 通过 shell 执行命令,return 将完整的输出作为字符串

它将return结果作为字符串。

<?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