通过apache文件列表问题

时间:2011-06-27 12:29:08

标签: php

我想使用php exec函数列出特定目录的列表文件。我用过这个

exec('ls /home/vikas/hft/a5/traders/sa/*.bin', $NameOfBinaries);

用于列出/home/vikas/hft/a5/traders/sa/目录中的bin文件的代码。当我在CLI模式下运行脚本时它工作正常,但是当我在浏览器中运行它返回空数组时。

5 个答案:

答案 0 :(得分:1)

Apache可能无权读取您主目录中的文件。

为什么不将文件移动到Apache可以看到的地方并使用PHP的readdir()函数?

http://php.net/manual/en/function.readdir.php

答案 1 :(得分:1)

确保网络服务器运行的用户帐户有权读取该目录。

答案 2 :(得分:1)

您可以使用glob() PHP函数,启用错误报告并在第一次出错时停止,如下所示:

error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('display_startup_errors',1); // This is not necessary, but can add info
$nameOfBinaries = glob( '/home/vikas/hft/a5/traders/sa/*.bin', GLOB_ERR );

请注意:GLOB_ERR标志仅适用于5.1.0以上的PHP版本。

此外,这似乎是一个权限问题,因此您可以检查您是否拥有该目录的正确访问权限:

$handle = fopen("/home/vikas/hft/a5/traders/sa/", "r");
echo ($handle===false)? "Readable dir":"Unreadable dir";

反过来,这是由于PHP Web服务器和命令行二进制文件运行的不同用户,即从命令行运行时,PHP继承了当前登录用户的权限,而从Web运行时,它继承了来自网络服务器的用户权限(Apache / ISS或其他)。

为了能够读取该dir(从Web运行时),必须在该目录上设置适当的权限。它必须是从运行Web服务器的用户或组中读取的。

如果您有Apache服务器,则在httpd.conf中UserGroup指令分别包含Apache将运行的用户名和组名。

如果您无法访问服务器配置,则应与系统管理员联系,询问该目录的读取权限。一个不太安全的选择是将该目录(通过FTP或shell)设置为“世界可读”。

答案 3 :(得分:0)

不要为此使用外部函数,而是使用内置的PHP directory functions

答案 4 :(得分:0)