PHP readdir, glob и exec('ls') возвращают пустой массив для некоторых каталогов в Apache

Я разработал следующий код PHP для чтения определенного каталога с именем /dados/capture:

tst2.php

<html>
<body>
<?php
echo "whoami: " . shell_exec('whoami')."<br>\n";
exec('ls /dados/capture/',$base);
echo "/dados/capture content ...<br>\n";
foreach ( $base as $dir )
{
    print $dir ."<br>\n";
}
?>

Выполнение кода через командную строку Linux «[root $ mysite] # sudo -u apache php tst2.php» возвращает следующее:

<html>
<body>
whoami: apache
<br>
/dados/capture content ...<br>
120130312115149.jpg<br>
120130312115149.swf<br>
120130312115658.jpg<br>
120130312115658.swf<br>
</body>
</html>

Вызов tst2.php из веб-браузера приводит к:

whoami: apache 
/dados/capture content ...

Я попытался изменить разрешение для папки (папок) и создать директиву <directory><directory> в httpd.conf без каких-либо изменений в результате.

Я протестировал код с другим каталогом, это было неожиданностью, потому что он также не работает для каталогов /boot, /mnt и /opt.

Использование glob или readdir приводит к тому же результату, но потребляет гораздо больше ресурсов процессора.

Я использую CentOs 2.6.32-279.22.1.el6.i686, Apache/2.2.15 и PHP 5.4.12.

У кого-нибудь была похожая проблема?


person Mauricio    schedule 21.03.2013    source источник
comment
если бы вы могли разместить свой код в кодовых блоках, пожалуйста. чтобы использовать кодовый блок, оставьте 4 пробела   -  person Nikitas    schedule 21.03.2013
comment
Кажется, проблема с разрешениями. В командной строке вы запускаете скрипт как root. У пользователя сервера apache, вероятно, недостаточно прав для отображения папки   -  person Ateszki    schedule 21.03.2013


Ответы (1)


Попробуйте
$out = shell_exec('ls /dir/path 2>&1'); Пользователь, просматривающий веб-страницы, может не иметь разрешения. Таким образом, вы можете получать эту ошибку.

person Community    schedule 21.03.2013