2013-10-22 88 views
-1

使用以下腳本,我嘗試打印這些目錄下所有目錄和文件的列表。但它並沒有這樣做。爲什麼我不能得到文件和目錄的名稱?

# Snippet that lists all the directories and files under that directory 

$dir_list = scandir("/"); 
for($var=0;$var<count($dir_list);$var++) { 
    if(is_dir($dir_list[$var])) { 
     $dh = opendir($dir_list[$var]); 
     echo "Name of directory : ".$dir_list[$var]; 
     echo "<br />"; 
     while(false !== ($filename = readdir($dh))) { 
      echo $filename; 
      echo "<br />"; 
     } 
    } 
    echo $dir_list[$var];echo "<br />"; 
} 
#end 

相反,這是我得到的輸出。這是所有目錄的列表。當存在如此多的目錄時,if語句只執行一次。這是爲什麼 ?

 $AVG 
$RECYCLE.BIN 
.Trash-1000 
01 - Raanjhanaa - DownloadMing.SE.mp3 
05. TUNE YE PHOOL.mp3 
16. THUMRI (TRADITIONAL).mp3 
AVS Player 
Aashiqui 2 {2013} Full Audio Songs Mp3 320kbps 
Aye_Khuda_Ret_Ke_Sehar_-_(IndianWap.Mobi).mp3 
Baazigar - Chhupana Bhi Nahi Aata (Pankaj Udhas)-(DJmaza.in).mp3 
CV [Resume] templates 
DWNL_VID 
Delhi Belly 2011 Hindi 720p DVDRip x264 Ali Baloch Silver RG.mkv 
Name of directory : Devdas - Blu-Ray - 720p - x264 - [DDR] 
. 
.. 
Devdas (Sample) - Blu-Ray - 720p - x264 - [DDR].mkv 
Devdas (Screenshots) - Blu-Ray - 720p - x264 - [DDR] 
Devdas - Blu-Ray - 720p - x264 - [DDR].gif 
Devdas - Blu-Ray - 720p - x264 - [DDR].mkv 
Devdas - Blu-Ray - 720p - x264 - [DDR].nfo 
Devdas - Blu-Ray - 720p - x264 - [DDR] 
Dil-Se.avi 
Doc 
DwnlData 
Gangs of Wasseypur II 2012 Hindi 720p DvDRip CharmeLeon Silver RG.mkv 
Gayatri-Mantra-Anuradha-Paudwal[www.savevid.com].mp4 
Ghalib ghazal - 23.pdf 
Ghar_Gulzar_Aapki Aankhon_mein.mp3 
Gladiator[Extended.Edition]DvDrip.AC3[Eng]-aXXo 
Google Drive 
HD-Wallpapers 
Hanuman-Chalisa-by-Gulshan-Kumar[www.savevid.com].3gp 
I Am Kalam (2010) DVDRip(www.mastitorrents.com).avi 
IMG_20120526_191139.jpg 
Installed_Apps 
Internet Download Manager 6.05 Build 7 Final 
Jagjit Singh - Tera Bayaan Ghalib (2012) 128Kbps MP3.rar 
Jai-Radha-Hare-Krishna[www.savevid.com].3gp 
Java Persistence With Hibernate 2012 
Khamoshi 1966 
Lakshya.avi 
MahaMantra-Hare-Rama-Hare-Krishna-by-Jagjit-Singh[www.savevid.com].3gp 
New Folder 
New folder (2) 
OS images 
Om-Gan-Ganapataye-Namo-Namah[www.savevid.com].3gp 
Om-Namah-Shivay-(Beautiful-Bhajan-By-Jagjit-Singh)[www.savevid.com].3gp 
Pending 
PseudoCompiler.cnt 
PseudoCompiler.exe 
PseudoCompiler.hlp 
Ra-One 
Ravi Shankar 
Rhythm and Blues 
ST5UNST.LOG 
Shiv Kumar Sharma Torrent 
Shiv-Mahamrityunjaya-Mantra[www.savevid.com].3gp 
Shree-Hanuman-Chalisa-Anup-Jalota[www.savevid.com].mp4 
Special 26 - 2013 DVDRip XviD AC3 M-SuB xRG 
System Volume Information 
THE-GODFATHER.Part-3.DVDrip[vice] 
Taj-Mahal--Secrets-n-Mysteries[www.savevid.com].flv 
Tera Bayaan Ghalib Part 1.wmv 
Tera Bayaan Ghalib Part 2.wmv 
Tera byaan ghalib 
The Godfather - II 
The Godfather part 1.avi 
Untitled Folder 
VDI 
Vicky Donor - DVDRip - XviD - 1CDRip - [DDR] 
VideoLAN - VLC media player for Fedora.htm 
VideoLAN - VLC media player for Fedora_files 
Visual Fox Pro 9 
Visual Fox Pro 9.zip 
Windows_Movie_Maker 
adding security_niit_glassfish 
animated gifs 
flipkart 
found.000 
games_setup 
ghazals 
htmlProject 
httpd-2.2.17 
java project 
logs 
mehdi hassan...arz e niyaaz e isqh ke qabil nahi raha.mp3 
music 
music_videos 
niit 
non_music_vidoes 
old paper 
only jagjit 
pagefile.sys 
pics 
program works 
softwares 
suhail_1.2 
sunny01(www.songs.pk).mp3 
tie_1.JPG 
tie_2.jpg 
+0

你也許需要通過完整目錄路徑執行opendir(),也許前面加上一個/會做 – Ahmad

+0

此輸出的一部分,是不是發生了什麼事情清楚了嗎? – Jon

+0

假設您正在運行Web服務器進程的腳本?該過程可能沒有映射E:就像您作爲用戶一樣。 – asantaballa

回答

1

「/」代表基於unix的系統。你的似乎是Windows(「E:\」)。

嘗試改變scandir("/")scandir('E:\')

+0

中的代碼不起作用... – saplingPro

+0

是什麼給了die(__ DIR __);'? – Asenar

+0

此外,運行apache(或nginx或其他)的用戶可能沒有讀取/執行您正在查找的目錄的權限。 試試你的代碼與'scandir(__ DIR __);' – Asenar

1

應該是這樣,

$dir_list = scandir("/"); 

for($var=0;$var<count($dir_list);$var++) { 
    if(is_dir($dir_list[$var])) 
    { 
     $dh = opendir($dir_list[$var]); 
     echo "<b>Name of directory : ".$dir_list[$var].'</b><br>'; 
     if($dh!=false && $dh!= '.' && $dh!='..') 
     { 
      while(false != ($filename = readdir($dh))) { 
       echo $filename; 
      } 
     } 
    } 
    else 
    { 
     echo "Name of file : ".$dir_list[$var].'<br>'; 
    } 
} 

如果你使用的是Windows比scandir()方法,你應該通過目錄的絕對路徑。

+0

我正在使用Windows。我必須得到所有目錄下所有文件的列表。那麼我猜想沒有絕對路徑的概念? – saplingPro

+0

@saplingPro是的。如果你當前的php文件是'E:\ folder \ index.php',那麼它是絕對路徑,相對路徑總是相對於其他文件。例如,如果在同一個文件夾中有一個'abc.php'文件並且'index.php'想要訪問這個文件,那麼可以有兩種方式來訪問1)相對路徑 - 直接給出'abc.php'和2)絕對路徑 - 我會在這裏給出'E:\ folder \ abc.php' – Ritesh

+0

我編輯了我的問題中的代碼。它只從一個目錄打印文件,並打印目錄名稱。爲什麼它這樣做? – saplingPro

0

至於你的問題是完全不同的,我做了其他答案:

1度,你需要遞歸 2℃,而不是用複雜的功能(執行opendir,readdir的)的SCANDIR足夠基於

您代碼:

<?php 

function displayRecursive($path){ 
    $dir_sep = DIRECTORY_SEPARATOR; 
    $path = rtrim($path, '/').'/'; // 
$dir_list = scandir($path); 
    echo '<ul>'; 
foreach($dir_list as $file){ 
     if ($file[0] == '.') 
      continue; 

     echo '<li>'; 
     if(is_dir($path.$dir_sep.$file)){ 
      echo "Name of directory : ".$dir_list[$var]; 
      displayRecursive($path.$dir_sep.$file); 
     } 
     else{ 
      echo $filename; 
     } 
     echo '</li>'; 
} 
    echo '</ul>'; 

} 
$first_dir = '/'; 
displayRecursive($first_dir) 
+0

你能解釋我的代碼有什麼問題嗎?它打印一個目錄列表,並且索引號爲13,在流動時留下一些目錄 – saplingPro

+0

在代碼中,缺少'if is_dir'部分:顯示文件的名稱,無論其類型(目錄或文件)是。 – Asenar

+0

我們可以在這裏討論@http://chat.stackoverflow.com/rooms/39751/discussion-between-saplingpro-and-asenar – saplingPro

相關問題