2016-06-07 57 views
1

我想檢查一個文件夾是否至少包含1個真實文件。我試過這個代碼:如何檢查文件夾是否僅包含使用php的文件

$dir = "/dir/you/want/to/scan"; 
$handle = opendir($dir); 
$folders = 0; 
$files = 0; 

while(false !== ($filename = readdir($handle))){ 
    if(($filename != '.') && ($filename != '..')){ 
     if(is_dir($filename)){ 
      $folders++; 
     } else { 
      $files++; 
     } 
    } 
} 

echo 'Number of folders: '.$folders; 
echo '<br />'; 
echo 'Number of files: '.$files; 

當在文件夾中scan是1個子文件夾和2個真實文件;上面的代碼給了我作爲輸出:

Number of folders: 0

Number of files: 3

如此看來,一個子文件夾被視爲一個文件。但我只想要檢查真實文件。我怎麼能做到這一點?

+0

內做到這一點幫助您:https://secure.php.net/manual/en/ function.scandir.php#87527?並檢查數組是否爲空()。 – 2016-06-07 11:38:40

+0

[PHP:如何在沒有列出子目錄的情況下列出目錄中的文件]的可能副本(http://stackoverflow.com/questions/7684881/php-how-to-list-files-in-a-directory-without-list -subdirectories) – Thamilan

回答

2

您可以使用​​3210輕鬆完成此任務:

$dir = "/dir/you/want/to/scan"; 
$folders = glob($dir . '/*', GLOB_ONLYDIR); 
$files = array_filter(glob($dir . '/*'), 'is_file'); 

echo 'Number of folders: ' . count($folders); 
echo '<br />'; 
echo 'Number of files: ' . count($files); 
+0

太棒了!這很好用!感謝您的解決方案 –

3

根據您的第一行,您指定的路徑與腳本路徑不同,您應該在is_dir if-clause中結合$ dir和$ filename。

爲什麼?

因爲如果你的腳本是:

/var/web/www/script.php

,你檢查$ DIR:

的/ etc/httpd的

包含子文件夾「conf」,腳本將檢查子文件夾/ var/web/www/conf

+0

它的腳本中是'$ dir',但這是正確的答案。 –

1

您可以使用scandir

SCANDIR - 列出文件和目錄的指定路徑

<?php 
$dir = "../test"; 
$handle = scandir($dir); 
$folders = 0; 
$files = 0; 
foreach($handle as $filename) 
{ 
    if(($filename != '.') && ($filename != '..')) 
    { 
     if(is_dir($filename)) 
     { 
      $folders++; 
     } 
     else 
     { 
      $files++; 
     } 
    } 
} 

echo 'Number of folders: '.$folders; 
echo '<br />'; 
echo 'Number of files: '.$files; 
?> 
相關問題