php exec命令不允许使用{}定义多个文件

时间:2011-02-25 01:50:35

标签: php file command exec

我需要执行一个适用于多个文件的exec命令,但它不起作用。我将创建一个EXAMPLE来展示这一点。显然,我不需要这个目录的任何内容,我使用“ls”命令执行示例,尽管与其他任何命令一起使用:

exec("ls -al /etc/security/", $output);
print_r($output);

Array
(
    [0] => total 40
    [1] => drwxr-xr-x  2 root root 4096 Jan 27  2010 .
    [2] => drwxr-xr-x 83 root root 4096 Feb 24 12:38 ..
    [3] => -rw-r--r--  1 root root 4266 Apr  9  2008 access.conf
    [4] => -rw-r--r--  1 root root 3551 Apr  9  2008 group.conf
    [5] => -rw-r--r--  1 root root 1911 Apr  9  2008 limits.conf
    [6] => -rw-r--r--  1 root root 1507 Apr  9  2008 namespace.conf
    [7] => -rwxr-xr-x  1 root root  977 Apr  9  2008 namespace.init
    [8] => -rw-------  1 root root    0 Jan 27  2010 opasswd
    [9] => -rw-r--r--  1 root root 2980 Apr  9  2008 pam_env.conf
    [10] => -rw-r--r--  1 root root 2180 Apr  9  2008 time.conf
)

但尝试使用更多文件......

exec("ls -al /etc/security/{access.conf,group.conf}", $output);
print_r($output);

ls: cannot access /etc/security/{access.conf,group.conf}: No such file or directory

当然这适用于控制台:

$ ls -al /etc/security/{access.conf,group.conf}
-rw-r--r-- 1 root root 4266 2008-04-09 15:25 /etc/security/access.conf
-rw-r--r-- 1 root root 3551 2008-04-09 15:25 /etc/security/group.conf

2 个答案:

答案 0 :(得分:1)

正如评论中所提到的,这是shell扩展{}速记的问题,这在PHP环境中不会发生。您必须单独提供完整路径:

exec('ls -al /etc/security/access.conf /etc/security/group.conf', $output);

答案 1 :(得分:1)

如果您有权这样做,这可能只是将bash作为/ bin / sh的提供者。