2012-04-14 82 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)){

相關問題