2012-04-14 61 views
1

所以我在我的电影目录的页面中列出项目,只要没有子目录就好了。php is_dir有时候不会工作

该页面可以在这里查看。 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标记的回显行,并且它显示了完整的路径和它的绝对权限。

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

所以基本上我需要一些帮助才能得到这个工作。我疯了,不明白is_dir还是有更好的方法?

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

顺便说一句,请确保您使用HTML5兼容的浏览器,因为我正在使用一些其他HTML5的东西之间的视频标签。我正在使用chrome进行开发。

谢谢。

编辑问另一种相关的问题。

我使用CSS模拟了视频标签的全屏模式,除了它仍然显示右侧的滚动条,以及它在真正黑暗的场景中变得烦人之外,它的效果很好。有没有什么办法摆脱这个。即使我在浏览器中处于全屏模式,它也会持续(f11)​​。浏览器是Chrome浏览器,我将z-index设置为10,没有其他设置。

编辑:

我被做$( '身体')的CSS摆脱滚动条的( '溢出', '隐藏');作为我的全屏功能的一部分,并在切换回来时关闭它。

+0

is_dir will fai l在类似于:C:\ wamp \ www \ hmvc \ resources \ lang \ es-ar(或nix equiv。) - 注意在es-ar中的连字符 – Jeffz 2012-05-18 17:49:10

回答

0

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

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

+0

我不明白我将它传递给完整路径而不是文件名。如果我做你的建议,我最终会告诉它扫描d:\ moviesD:\电影\无论目录这显然不工作。我使用ID来提供路径,那是该文件夹的完整路径。 – 2012-04-15 23:37:03

+0

没关系我明白你的意思是scandir只返回新的目录名,因此is_dir不起作用。现在非常有意义。我知道我错过了一些愚蠢的东西。谢谢。 – 2012-04-16 01:33:15

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)){

相关问题