PHP readdir,glob和exec('ls')返回Apache下的某些目录的空数组

时间:2013-03-21 17:37:41

标签: php apache glob ls readdir

我开发了以下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目录。

使用globreaddir会产生相同的结果,但会消耗更多的处理器。

我正在使用CentOs 2.6.32-279.22.1.el6.i686,Apache / 2.2.15和PHP 5.4.12。

有人有类似的问题吗?

1 个答案:

答案 0 :(得分:0)

尝试
    $ out = shell_exec('ls / dir / path 2&gt;&amp; 1'); 正在浏览网页的用户可能没有权限。因此,可能会出现此错误。