【问题标题】:Case Insensitive Shell Command Not Working With PHP Exec不区分大小写的 Shell 命令不适用于 PHP Exec
【发布时间】:2018-03-22 02:26:21
【问题描述】:

我在两个 ubuntu 16.04 上运行 PHP 7.0.22,在 LAMP 下。

当我打开一个 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>";

返回

Array ( [0] => ) 

【问题讨论】:

    标签: php linux apache exec


    【解决方案1】:

    您需要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

    【讨论】:

    • 感谢您的回复。不幸的是,该解决方案似乎不适用于正则表达式。我已经编辑了我的问题并在编辑 1 下显示了结果。谢谢,
    • 修改了我的解决方案以适应您修改后的问题
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2018-01-25
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多