1

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

该页面可以在这里查看。 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(如果已经显示),请随意。我觉得这是一种非常“hack”的方式,但我还是很新,不知道很多技巧。它在 dirList.js 的 jQuery AJAX 部分

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

谢谢。

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

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

编辑:

我通过 $('body').css('overflow', 'hidden'); 摆脱了滚动条 作为我全屏功能的一部分,并在切换回时将其关闭。

4

2 回答 2

2

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

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

于 2012-04-14T03:43:06.390 回答
0

问题正是没有使用绝对路径,

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

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

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

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

于 2012-04-14T03:44:56.053 回答