php is_dir有时不会工作

时间:2012-04-14 03:30:18

标签: php jquery html5

所以我在我的电影目录的页面中列出项目,只要没有子目录就好了。

可在此处查看该页面。 http://jnks.dyndns.org/dirlist.php

可以从那里获取最相关的代码,直到XHR将信息发送到functions.php页面。我认为这一切看起来都很可靠,因为它适用于包含文件的文件夹而没有其他文件夹。

这是functions.php的代码

 $exts = array(
    '.mp4' => 'Apple Video',
    '.m4v' => 'Apple Video',
    '.ogg' => 'OGG Vorbis Video',
    '.ogv' => 'OGG Vorbis Video',
    '.webm' => 'MS Video',
    '.avi' => 'MS Video',
    '.mkv' => 'Matroska Video',
    '.iso' => 'Compressed DVD'
);

if(isset($_POST['dirName'])) {
$arg = $_POST['dirName'];
$dirList = scandir($arg);
echo '<ul>';
foreach($dirList as $dirs){
    if($dirs === '.' || $dirs === '..') {continue;} //remove dots
    if(is_dir($dirs)){
        echo '<li class="lv2" id="'.$arg.'\\'.$dirs.'" onclick="getDirList(this)">'.$dirs.'</li>'; //if dir create new nested list with function to drill down
    } else {
        $ext = strrchr($dirs,'.');
        if($exts[$ext]){
            echo '<li class="lv3" id="'.$dirs.'" data-folder="'.$arg.'\\'.$dirs.'" onclick="openFile(this)">'.$dirs.'</li>'; //if files then create new nested list
        }
    }
}
echo '</ul>';
} else {
    echo 'POST variable is not set';
}

似乎is_dir不想工作。我已经完成了搜索,其他人似乎都没有使用绝对路径。我知道这不是我的问题,因为我打印了$ arg var以及关闭ul标签的echo线,它显示了一个完整路径,而且它绝对不是权限。

我已经尝试将is_dir更改为!is_file,这允许它列出文件夹,但它还列出了我不想显示的文件,因为它绕过我的ext过滤器(我想我可以添加过滤器但是is_dir应该工作正确吗?)。

所以基本上我需要一些帮助来实现这个目标。我疯了,不明白is_dir还是有更好的方法?

如果有人想查看我用来隐藏嵌套列表的JavaScript,如果已经显示了一个,请随意。我觉得这是一种非常“黑客”的做法,但我仍然很新,不知道很多技巧。它位于dirList.js的jQuery AJAX部分

顺便说一句,请确保您使用HTML5兼容的浏览器,因为我在其他HTML5内容中使用了视频标记。我正在开发这个时使用chrome。

感谢。

编辑以询问另一种相关问题。

我已经使用CSS模拟了视频标签的全屏模式,它的效果很好,除了它仍然显示右侧的滚动条,它在真正的黑暗场景中变得烦人。有没有办法摆脱这个。即使我在浏览器中处于全屏模式(f11)​​,它仍然存在。浏览器再次是Chrome,我将z-index设置为10,并且根本没有设置任何其他内容。

编辑:

我通过执行$('body')来摆脱滚动条.css('overflow','hidden');作为我的全屏功能的一部分,当它切换回来时就关掉它。

2 个答案:

答案 0 :(得分:1)

is_dir()适用于完整文件路径。你只是传递一个文件名...即使该文件实际上位于$arg指向的目录内。

尝试is_dir($arg . "/" . $dirs)

答案 1 :(得分:0)

问题确实不是使用绝对路径,

在您的情况下,您可以通过修改如下来修复它:

$arg = $_POST['dirName'];$arg = realpath($_POST['dirName']);

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

if(is_dir($dirs)){if(is_dir($arg . '/' .$dirs)){