Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: is_dir - не работает
 
 автор: kostiaGt   (20.02.2010 в 19:35)   письмо автору
 
 

Есть такой код:

$dh = opendir($dir);
 while( $files = readdir($dh) ) {
     if( $files != '.' && $files != '..') {
          print  "<b>". ( is_dir($files) ? 'DIR': 'FILE' )."</b>: $files<br>";  
     }
}    

Выводит список файлов и каталогов и везде пишет, что файл не является каталогом.
FILE HTML (4-1.01).html
FILE plugin1
FILE htmlForms
FILEadminPanelOptions

На самом деле (plugin1, htmlForms, adminPanelOptions) - это каталоги

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 20:12)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 19:35)
 

Потому, что is_dir($files) смотрит не в $dir, а в папке, где находится файл с приведённым Вами скриптом. А в этой папке нет $files и по этому из условия is_dir($files) ? 'DIR': 'FILE' возвращает FILE.
Т. е. работает всё правильно, но запрограммировано не то, что Вам надо.

  Ответить  
 
 автор: kostiaGt   (20.02.2010 в 20:34)   письмо автору
 
   для: Yuriev   (20.02.2010 в 20:12)
 

нет, я в переменную $dir указал имя папки. Скрипт открыл эту папку и вывел списко папок и файлов. В этом каталоге находятся один файл (HTML (4-1.01).htm) и три папки (plugin1, htmlForms, adminPanelOptions). Строка кода, которая выводит этот список (
print ( is_dir($files) ? 'DIR': 'FILE' )." $files<br>"; 
) проверяет, используя функция
is_dir
, какой элемент в выводимом списке является папкой, а какой файлом (делается это просто для примера).
Я ожидаю получить вот такой результат:
FILE HTML (4-1.01).html
DIR plugin1
DIR htmlForms
DIR adminPanelOptions
а получаю:
FILE HTML (4-1.01).html
FILE plugin1
FILE htmlForms
FILE adminPanelOptions

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 21:08)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 20:34)
 

opendir($dir) - это открыть папку, а не сделать ее текущей

is_dir смотрит в папку по умолчанию текущую т.е. в папку где лежит скрипт, а не в папку $dir.
Скажите ему чтоб смотрел в папку $dir например так is_dir($dir.'/'.$files)
... и будет Вам счастье!

  Ответить  
 
 автор: kostiaGt   (20.02.2010 в 21:18)   письмо автору
 
   для: Yuriev   (20.02.2010 в 21:08)
 

я указал папку и скрипт открыл эту папку и вывел в этой папке список файлов и каталогов.
вот другой пример:

/*
В переменную $dir передал имя каталога (plugins)
Структура каталога plugins:
| plugins (каталог)
---| plugin1(каталог)
---| htmlForms (каталог)
---| adminPanelOptions (каталог)
---| HTML (4-1.01).html (файл)

*/

$dir = 'plugins';
$dh = opendir($dir);
while( $files = readdir($dh) ) {
     if( $files != '.' && $files != '..') {
                print "\$dir [$dir] ".( is_dir($files) ? 'DIR': 'FILE' )." $files<br>";   
     }
}


Выыодит:
$dir [plugins] FILE HTML (4-1.01).html
$dir [plugins] FILE plugin1
$dir [plugins] FILE htmlForms
$dir [plugins] FILE adminPanelOptions

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 22:40)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 21:18)
 

1. Напишите так is_dir($dir.'/'.$files)
2. Запустите скрипт и убедитесь, что теперь печатает правильно.
3. Перечитайте то, что я писал выше
4. Если будет всё равно непонятно почему теперь печатает правильно, то значит PHP создан "криво" и с ним не стоит связываться

  Ответить  
 
 автор: Тень&   (20.02.2010 в 22:42)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 21:18)
 

Ты не понимаешь. Ещё раз: opendir() не делает каталог $dir текущим. Чтобы было понятнее, замени is_dir($files) ? 'DIR' : 'FILE' на file_exists($files) ? 'EXISTS' : 'NOT EXISTS'

> 4. Если будет всё равно не понятно почему теперь печатает правильно, тго значит PHP создан "криво" и с ним не стоит связываться
Тебе рано советы давать

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 22:49)   письмо автору
 
   для: Тень&   (20.02.2010 в 22:42)
 

Да, дествительно, у Вас, Тень&, объяснять получается лучше. Дерзайте!
А я пойду читать справочник.

  Ответить  
 
 автор: kostiaGt   (20.02.2010 в 22:53)   письмо автору
 
   для: Тень&   (20.02.2010 в 22:42)
 

Ребята извините. Я, наверное, полный баран в php но, вот у меня скрипт выводит список файлов и каталогов, как мне определить какой файл является файлом, а какой каталогом?. Я так понимая, что это должна делать функция is_dir но, у меня эта функция показывает, что каталогами являются и файлы.
Пожалуйсто напишите скрипт, который выводил список файлов и каталогов и определял где файл, а где каталог.

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 22:54)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 22:53)
 

$dir = 'plugins'; 
$dh = opendir($dir); 
while( $files = readdir($dh) ) { 
     if( $files != '.' && $files != '..') { 
                print "\$dir [$dir] ".( is_dir($dir.'/'.$files) ? 'DIR': 'FILE' )." $files<br>";    
     } 
}

  Ответить  
 
 автор: kostiaGt   (20.02.2010 в 23:01)   письмо автору
 
   для: Yuriev   (20.02.2010 в 22:54)
 

да, все правильно. Но, когда функция is_dir встречается с файлом (is_dir('someFile.html') ) она выдает, что это каталог ( var_dump( is_dir('someFile.html') ) - bool(true) )

  Ответить  
 
 автор: Yuriev   (20.02.2010 в 23:25)   письмо автору
 
   для: kostiaGt   (20.02.2010 в 23:01)
 

Извини, но пишу последний раз
Дело в том, что происходит так: is_dir('someFile.html') ,
а должно быть так: is_dir('plugins/someFile.html')

Подчеркиваю, вот так: is_dir($dir.'/'.$files)

  Ответить  
 
 автор: Trianon   (20.02.2010 в 23:34)   письмо автору
 
   для: Yuriev   (20.02.2010 в 23:25)
 

От того, что путь пропущен, кмк, someFile.html ни с того ни с сего каталогом не станет.

  Ответить  
 
 автор: Yuriev   (21.02.2010 в 05:26)   письмо автору
 
   для: Trianon   (20.02.2010 в 23:34)
 

>От того, что путь пропущен, кмк, someFile.html ни с того ни с сего каталогом не станет.
Разъясните к чему Ваше замечание. Ни участники разговора ни скрипт не воспринимали someFile.html папкой. И что есть "кмк"?

  Ответить  
 
 автор: Николай2357   (21.02.2010 в 06:41)   письмо автору
 
   для: Yuriev   (21.02.2010 в 05:26)
 

У нас КМК это Кузнецкий Металлургический Комбинат. А у Trianon'a по всей видимости - "как мне кажется".
А по сути - я воспроизвел Вашу ситуацию и результат положительный:
$dir [plugins] FILE someFile.html
так что дело не в бобине. Может глючит где то сервер (фантастика конечно).

  Ответить  
 
 автор: Тень&   (21.02.2010 в 12:28)   письмо автору
 
   для: Николай2357   (21.02.2010 в 06:41)
 

Сразу глючит сервер, ага.

Я думаю в порядке убывания вероятности это будет последний пункт. Первый -- автор что-то перепутал и подставлял не то (как неоднократно в этом топике он и делал). Второй вариант: там просто есть папка "someFile.html" (а почему бы и нет?)

  Ответить  
 
 автор: Николай2357   (21.02.2010 в 13:31)   письмо автору
 
   для: Тень&   (21.02.2010 в 12:28)
 

Не сразу))) это шутка была. Обычно когда что то не получается, первым делом грешат на компьютер. А дело вовсе не в бобине.

  Ответить  
 
 автор: Trianon   (21.02.2010 в 09:43)   письмо автору
 
   для: Yuriev   (21.02.2010 в 05:26)
 

>Ни участники разговора ни скрипт не воспринимали someFile.html папкой.

Даже здесь?
> автор: kostiaGt (20.02.2010 в 23:01) для: Yuriev (20.02.2010 в 22:54)
>да, все правильно. Но, когда функция is_dir встречается с файлом (is_dir('someFile.html') ) она выдает, >что это каталог ( var_dump( is_dir('someFile.html') ) - bool(true) )
А по-моему скрипт его именно так и воспринял.
Вообще-то вся тема тредстартером инициирована по причине, что у него скрипт файлза каталог принимает.

Замечание мое было вызвано тем, что Ваш ответ на это поведение свет не пролил.

>И что есть "кмк"?
Про кмк пояснил Николай.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования