Команда php exec не разрешает определение нескольких файлов с {} - PullRequest
0 голосов
/ 25 февраля 2011

Мне нужно выполнить команду exec, которая применяется к нескольким файлам, но она не работает.Я собираюсь создать ПРИМЕР, чтобы показать это.Очевидно, что мне ничего не нужно из этого каталога, и я делаю пример с командой "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 ]

1 голос
/ 25 февраля 2011

Если у вас есть права для этого, возможно, просто нужно сделать bash провайдером для /bin/sh.

1 голос
/ 25 февраля 2011

Как уже упоминалось в комментариях, это проблема оболочки, расширяющей сокращение {}, чего не происходит в среде PHP. Вы должны будете указать полные пути отдельно:

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