2013-09-19 2 views
1

Я использую scandir() для поиска файлов рекурсивно. Но если путь к файлу направляется в файл, а не в папку, появится предупреждение. Как я могу проверить путь, направляет ли он файл или папку?Как проверить путь - это файл или папка в PHP

enter code here 
<?php 

$path = "C:\\test_folder\\folder2\\folder4"; 
$sub_folder = scandir($path); 
$num = count($sub_folder); 
for ($i = 2; $i < $num; $i++) 
{ 
...//if $sub_folder[$i] is a file but a folder, there will be a warning. 
     How can I check $sub_folder[$i] before use it? 




} 
?> 

Спасибо!

+1

действительно быстрый Google дает ответ в руководстве PHP, BOOL is_dir (string $ filename) –

+0

[is_file] (http://php.net/manual/en/function.is-file.php). –

ответ

4

Посмотрите в is_dir() и is_file()

<?php 

$path = "C:\\test_folder\\folder2\\folder4"; 
$sub_folder = scandir($path); 
$num = count($sub_folder); 
for ($i = 2; $i < $num; $i++) 
{ 
    if(is_file($path.'\\'.$sub_folder[$i])){ 
     echo 'Warning'; 
    } 

} 
?> 
+0

Спасибо! Раньше я использовал is_dir() и is_file(), но просто использовал $ sub_folder [$ i] в качестве аргумента по ошибке и не получил желаемого результата. – asdk77

1

is_dir() должен сообщить вам, является ли путь каталогом или нет.

+0

Спасибо! Я использовал эту функцию раньше, но поставил неправильный аргумент. – asdk77

0

Вы также можете использовать DirectoryIterator (class)

$path = 'your path'; 
$dir = new DirectoryIterator(realpath($path)); 
foreach ($dir as $fileInfo) { 
    if($fileInfo->isFile()) { 
     // it's a file 
    } 
} 

Кроме того, вы можете проверить is_file и is_dir.

+0

Спасибо! Я использовал is_fie(). – asdk77

+0

Добро пожаловать :-) –

0

Вы можете проверить, имеет ли переменная расширение файла или нет.

Это "если" будет получает только файлы:

if (pathinfo($file, PATHINFO_EXTENSION)) 

и это "если" будет получает каталоги только:

if (!pathinfo($file, PATHINFO_EXTENSION))