я разработал следующий PHP-код, чтобы прочитать определенную директорию под названием /dados/capture
:PHP READDIR, Глобы и Exec («LS») возвращает в пустом массиве для некоторых каталогов под Apache
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 "[корень $ MySite] # Судо -u апач 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.
У кого-то была аналогичная проблема?
если вы могли бы разместить свой код в кодовых блоках, пожалуйста. для использования кодового блока оставить 4 пробела – Nikitas
Кажется, проблема с разрешениями. В командной строке вы запускаете скрипт как root. Возможно, у пользователя сервера Apache недостаточно прав, чтобы перечислить папку – Ateszki