[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: is_dir
XCross
делаю так:


for($i=0; $i<count($files_arr); $i++){

if(is_dir($files_arr[$i]){ unset($files_arr[$i]); }
sort($files_arr);
var_dump($files_arr);

}


Результат:

Цитата
array
  0 => string 'Thumbs.db' (length=9)
  1 => string 'font.JPG' (length=8)
  2 => string 'kmaks' (length=5)



Как можно заметить, '.' и '..' удаляет...

Аналогичная ситуация с filetype, is_file.
kmaks является каталогом.

ОС: WXP
Связка: Wamp

Помогите, плиз. :)



Спустя 5 минут, 18 секунд (3.08.2011 - 20:55) killer8080 написал(а):
is_dir($files_arr[$i])
а если использовать абсолютные пути?

Спустя 4 минуты, 50 секунд (3.08.2011 - 20:59) jetistyum написал(а):
ты дамп делай после того как закончатся все итерации

Спустя 1 минута, 28 секунд (3.08.2011 - 21:01) XCross написал(а):
define('IMG_DIR', './images/');

$files_array = scandir(IMG_DIR);

for($i=0; $i<count($files_array); $i++){

if(is_dir(IMG_DIR.$files_array[$i])){ unset($files_array[$i]);}

}


sort($files_array);
var_dump($files_array);


Я не копипастил просто..., а на форуме прям писал, поэтому дамп незаметил где пишу =)

Спустя 1 минута, 11 секунд (3.08.2011 - 21:02) jetistyum написал(а):
сделай
var_dump(is_dir(IMG_DIR.'/kmaks'));

Спустя 3 минуты, 14 секунд (3.08.2011 - 21:05) jetistyum написал(а):
Цитата

I encoutered an error returning false on a directory, my problem was not a bug, but a bad relative path error inside the script function is_dir(), maybe it can help someone having the same problem.

I am using Linux with the folowing structure:
/var/www/vhosts/example.com/httpdocs/images/items_images/file1.jpg
/var/www/vhosts/example.com/httpdocs/images/items_images/temp

<?php
/* The folder "temp" will show as directory with the following script: */
$full_path = "/var/www/vhosts/example.com/httpdocs/images/items_images";
if ($handle = opendir("$full_path")) {
    while (false !== ($file = readdir($handle))) {
        if(is_dir($full_path."/".$file)) continue;
        else echo $file;
    }
}
?>

<?php
/* The folder "temp" will show as a file with the following script: */
$full_path = "/var/www/vhosts/example.com/httpdocs/images/items_images";
if ($handle = opendir("$full_path")) {
    while (false !== ($file = readdir($handle))) {
        if(is_dir($file)) continue;
        else echo $file;
    }
}
?>


Спустя 4 минуты, 23 секунды (3.08.2011 - 21:10) killer8080 написал(а):
у меня этот код работает
Свернутый текст
define('IMG_DIR', './images/');

$files_array = scandir(IMG_DIR);

for($i=0; $i<count($files_array); $i++){

if(is_dir(IMG_DIR.$files_array[$i])){ unset($files_array[$i]);}

}


sort($files_array);
var_dump($files_array);

Спустя 55 секунд (3.08.2011 - 21:11) XCross написал(а):
Цитата
var_dump(is_dir(IMG_DIR.'/kmaks'));


boolean true


Цитата

images/font.jpg
images/kmaks
images/arm-2009q3


Что интересно, каталог arm-2009q3 определяется верно...

Спустя 4 минуты, 25 секунд (3.08.2011 - 21:15) jetistyum написал(а):
var_dump(is_dir(IMG_DIR.'/kmaks'));

var_dump(is_dir('/full/path/to/folder/kmaks')); ??


Спустя 4 минуты, 44 секунды (3.08.2011 - 21:20) XCross написал(а):
Цитата
define('IMG_DIR', 'C:/wamp/www/images/');


Тож самое. sad.gif

Спустя 3 минуты, 38 секунд (3.08.2011 - 21:23) killer8080 написал(а):
Цитата (kmaks @ 3.08.2011 - 21:20)
Тож самое.

что то же самое?
Цитата (kmaks @ 3.08.2011 - 21:11)
boolean true

ну так и должно быть smile.gif

Спустя 7 минут, 42 секунды (3.08.2011 - 21:31) jetistyum написал(а):
Цитата (killer8080 @ 3.08.2011 - 21:23)
ну так и должно быть

Блин, и я ступил smile.gif

Спустя 3 минуты, 4 секунды (3.08.2011 - 21:34) XCross написал(а):
define('IMG_DIR', './images/');	

$files_array = scandir(IMG_DIR);

for($i=0; $i<count($files_array); $i++){

if(is_dir(IMG_DIR.$files_array[$i])){ unset($files_array[$i]);}

}

sort($files_array);
var_dump($files_array);


Чтож не работает тон ничерта :(

Спустя 39 минут, 10 секунд (3.08.2011 - 22:13) ИНСИ написал(а):
kmaks попробуй так:
define('IMG_DIR', './images/');	
foreach(scandir(IMG_DIR) as $file) {
if(is_dir(IMG_DIR . '/' . $file))
rmdir(IMG_DIR . '/' . $file);
}

Спустя 3 минуты, 1 секунда (3.08.2011 - 22:16) XCross написал(а):
Цитата
array
  0 => string '.' (length=1)
  1 => string '..' (length=2)
  2 => string 'Thumbs.db' (length=9)
  3 => string 'folder' (length=6)
  4 => string 'font.JPG' (length=8)


sad.gif

Мож че в настройках сервера потыкать нужно?

Спустя 45 секунд (3.08.2011 - 22:17) ИНСИ написал(а):
kmaks я поправил свой код, попробуй заново

Спустя 8 минут, 27 секунд (3.08.2011 - 22:25) XCross написал(а):
опстоп =) только из массива удалить =)
ужас, я уже даже с такой операцией справится не могу sad.gif

Я уту заметил:
Каталог удалился, но массив обновился только после обновления странички. Что может быть не так?

Спустя 2 минуты, 26 секунд (3.08.2011 - 22:28) ИНСИ написал(а):
kmaks не понял, что сделать?

Спустя 2 минуты, 25 секунд (3.08.2011 - 22:30) ИНСИ написал(а):
kmaks так надо?
define('IMG_DIR', './images/');	
$arr = array('kmarks','secrets');

foreach(scandir(IMG_DIR) as $file) {
if(is_dir(IMG_DIR . '/' . $file) && in_array($file,$arr))
rmdir(IMG_DIR . '/' . $file);
}

Спустя 1 минута, 12 секунд (3.08.2011 - 22:32) XCross написал(а):
У меня имеется массив, полученный функцией scandir. От туда нужно убрать все ключи, значение которых, являются именами каталогов, т.е. я на выходе должен получить только список файлов в данной директории.

Каким то образом(невероятным)... массив "не обновляется" прости хоспади за чушь, которую я несу :(


	
$files_array = scandir(IMG_DIR);

for($i=0; $i<count($files_array); $i++){

if(is_dir(IMG_DIR.$files_array[$i])){

unset($files_array[$i]);

}

}


sort($files_array);
var_dump($files_array);



работа функции is_dir видна в твоем скрипте, так как каталог удаляется

Спустя 13 минут (3.08.2011 - 22:45) ИНСИ написал(а):
kmaks все куда легче :) Попробуй так:
define('IMG_DIR', './images/');	
foreach( ($arr = scandir(IMG_DIR) ) as $key => $name) {
if(is_dir(IMG_DIR . '/' . $name))
unset($arr[$key]);
}
print_r($arr);

Спустя 5 минут, 34 секунды (3.08.2011 - 22:50) killer8080 написал(а):
kmaks
твой вариант изначально рабочий, в константе указывай абсолютный путь. Думаю в этом вся проблема.

Спустя 16 минут, 14 секунд (3.08.2011 - 23:06) XCross написал(а):
от корня диска, т.е. C:/...? если так, то не юзабельно ведь =)

Спустя 49 секунд (3.08.2011 - 23:07) neadekvat написал(а):
Цитата (kmaks @ 4.08.2011 - 00:06)
от корня диска, т.е. C:/...? если так, то не юзабельно ведь =)

$_SERVER['DOCUMENT_ROOT"]

Спустя 8 часов, 29 минут, 45 секунд (4.08.2011 - 07:37) linker написал(а):
Вот смотрю я на вас и в толк взять не могу, над каким вопросом трудитесь? Может я туплю, но я так и не въехал, какая проблема у ТС.

Если в результирующем списке отсутствуют "." и "..", то ты сам их отсеял is_dir() -> unset(), ибо они являются каталогами. Уточни для меня свой вопрос.

Спустя 2 часа, 10 минут, 16 секунд (4.08.2011 - 09:47) XCross написал(а):
Цитата
Вот смотрю я на вас и в толк взять не могу, над каким вопросом трудитесь? Может я туплю, но я так и не въехал, какая проблема у ТС.

В списке остаются все каталоги, кроме "." и "..".

Извините за мою тупость, как то 2-3 недельки мозги не напрягал, все потихонечку и пропало :(

Возможно причина не в пути. Так оно и есть.

Если в скрипте заместо unset использовать rmdir, то удалится каталог, но в массиве список не обновится =(

define('IMG_DIR', $_SERVER['DOCUMENT_ROOT'].'images/');

$files_array = scandir(IMG_DIR);

for($i=0; $i<count($files_array); $i++){

if(is_dir(IMG_DIR.$files_array[$i]) and $files_array[$i] != '.' and $files_array[$i] != '..'){

rmdir(IMG_DIR.$files_array[$i]);

}

}

sort($files_array);
var_dump($files_array);



Естесственно при следующем обновлении страницы все гул, список выглядит так, как и должен.

Спустя 1 час, 26 минут, 42 секунды (4.08.2011 - 11:14) linker написал(а):
Понятно, но сути это не меняет. А суть в том, что удаление элементов из массива, проходясь по нему в цикле приводит к весьма банальным логическим ошибкам. Либо создавать новый результирующий массив с нужными элементами, либо использовать array_filter(), либо менять конструкцию цикла
define('IMG_DIR', $_SERVER['DOCUMENT_ROOT'].'images/');
$files = array();
foreach(scandir(IMG_DIR) as $file)
{
if(is_file(IMG_DIR . $file) || $file == '.' || $file == '..')
$files[] = IMG_DIR . $file;
}
sort($files);
var_dump($files);

Спустя 2 минуты, 40 секунд (4.08.2011 - 11:17) XCross написал(а):
Ок, попробую. Спасибо. tongue.gif

Все работает, вопрос решен.

Спустя 21 минута, 32 секунды (4.08.2011 - 11:38) ИНСИ написал(а):
kmaks либо мы не можем понять, что именно тебе надо, либо ты что-то не то делаешь. Вот код:
define('IMG_DIR', dirname(__FILE__) . '/images/');	
foreach( ($arr = scandir(IMG_DIR) ) as $key => $name) {
if( is_dir(IMG_DIR . '/' . $name))
unset($arr[$key]);
}
print_r($arr);

Выводит все кроме, папок, '.', '..'.

Спустя 15 минут, 37 секунд (4.08.2011 - 11:54) neadekvat написал(а):
INSIDIOUS, так вроде . и .. тоже каталогами считаются.

Спустя 23 минуты (4.08.2011 - 12:17) ИНСИ написал(а):
neadekvat не совсем понял тебя

Спустя 1 минута, 34 секунды (4.08.2011 - 12:18) neadekvat написал(а):
var_dump(is_dir('.')); // bool(true)

Не нужно делать доп. проверки на имя для . и .., если проверяешь функцией is_dir.

Спустя 31 минута, 34 секунды (4.08.2011 - 12:50) XCross написал(а):
Все гуд, мне нужно было чтоб в массиве были только имена файлов данной директории. Вопрос решен.

Спустя 11 минут, 55 секунд (4.08.2011 - 13:02) ИНСИ написал(а):
neadekvat smile.gif Моя оплошность, бывает. Просто изначально я тестил с !is_file и пробовал все варианты, а потом не обратил внимания. +1 тебе за внимательность. Кстати, ты тоже допустил ошибку тут: smile.gif

Цитата
$_SERVER['DOCUMENT_ROOT"]

но это мелочи, бывает.

kmaks а решение свое выставишь на обозрение?

Спустя 42 секунды (4.08.2011 - 13:02) killer8080 написал(а):
kmaks
я так и не понял в чем у тебя была проблема, но есть вариант проще, при условии, что все файлы имеют расширение
$files = glob($_SERVER['DOCUMENT_ROOT'] . '/images/*.*');

Спустя 2 часа, 32 минуты, 24 секунды (4.08.2011 - 15:35) linker написал(а):
killer8080
Папки тоже могут иметь расширение, да и вообще любой файл или папка, могут иметь в своём имени не одну точку, не надо везде пихать функцию glob(), не для таких задач она предназначена.

Спустя 29 минут, 39 секунд (4.08.2011 - 16:04) killer8080 написал(а):
Цитата (linker @ 4.08.2011 - 15:35)
Папки тоже могут иметь расширение, да и вообще любой файл или папка, могут иметь в своём имени не одну точку

Сомневаюсь что там будут папки с точками в названии, а насчёт файлов, файл с именем вроде some.cool.picture.jpg то же входит в маску *.* wink.gif
Сюда не попадут только файлы без расширений и начинающиеся с точки (например .htaccess). Если это не критично, то такой вариант то же имеет право на жизнь smile.gif
Цитата (linker @ 4.08.2011 - 15:35)
не надо везде пихать функцию glob(), не для таких задач она предназначена.

и почему в этой задаче она противопоказана?

Спустя 3 минуты, 20 секунд (4.08.2011 - 16:08) neadekvat написал(а):
Цитата (killer8080 @ 4.08.2011 - 17:04)
Сомневаюсь что там будут папки с точками в названии, а насчёт файлов, файл с именем вроде some.cool.picture.jpg то же входит в маску *.*

Сегодня нет, а завтра появилось.
Уже стопиццот раз замечано - если при написании программы ты расчитываешь, что "вряд ли будет", это обязательно появится.

Цитата (killer8080 @ 4.08.2011 - 17:04)
Сюда не попадут только файлы без расширений и начинающиеся с точки (например .htaccess). Если это не критично, то такой вариант то же имеет право на жизнь

А по-моему, * означает "любое количество любых символов или ни одного символа".

Цитата (killer8080 @ 4.08.2011 - 17:04)
и почему в этой задаче она противопоказана?

glob() надо использовать как фильтр, чтобы потом по циклам не отсеивать файлы - т.е. ты получишь сразу готовый массив файлов.
А для обычного чтения каталога есть функции, которые уже использовались в этой теме выше.

PS я не являюсь официальным представителем Линекра, и его мнение может кардинально отличаться от моего.

Спустя 11 минут, 22 секунды (4.08.2011 - 16:19) linker написал(а):
killer8080
Никто о противопоказаниях речи и не ведёт, просто всему своё место.

Спустя 15 минут, 16 секунд (4.08.2011 - 16:34) killer8080 написал(а):
Цитата (neadekvat @ 4.08.2011 - 16:08)
Сегодня нет, а завтра появилось.

Сами они не появятся, а зачем вообще использовать точки в названиях папок blink.gif
Цитата (neadekvat @ 4.08.2011 - 16:08)
А по-моему, * означает "любое количество любых символов или ни одного символа".

там маска *.*
Цитата (neadekvat @ 4.08.2011 - 16:08)
glob() надо использовать как фильтр, чтобы потом по циклам не отсеивать файлы - т.е. ты получишь сразу готовый массив файлов.

ну так это оно и есть. В задаче нужно получить массив всех файлов в папке, отсеяв директории. Единственное "но", это файлы без расширений и с точкой вначале, о чём я предупредил. Всё зависит от того, для чего нужен список файлов, может ему и не надо захватывать .htaccess и т.п., а файлов без расширений и не должно быть в папке images.
Я просто предложил как вариант решения в одну строку, если эти недостатки не критичны smile.gif

Спустя 36 минут, 36 секунд (4.08.2011 - 17:11) neadekvat написал(а):
Цитата (killer8080 @ 4.08.2011 - 17:34)
там маска *.*

Так разве .htaccess не подходит?

Цитата (killer8080 @ 4.08.2011 - 17:34)
ну так это оно и есть. В задаче нужно получить массив всех файлов в папке, отсеяв директории.

Так уж тогда и ограничивать изображения по известным расширением, которые должны быть в каталоге.

Спустя 27 минут, 7 секунд (4.08.2011 - 17:38) killer8080 написал(а):
Цитата (neadekvat @ 4.08.2011 - 17:11)
Так разве .htaccess не подходит?

Нет, .htaccess даже в маску * не подходит! Только под маску .* но туда попадает и "." и ".."
Цитата (neadekvat @ 4.08.2011 - 17:11)
Так уж тогда и ограничивать изображения по известным расширением, которые должны быть в каталоге.

ТС этого в задаче не уточнял smile.gif

Спустя 4 часа, 2 минуты, 12 секунд (4.08.2011 - 21:40) XCross написал(а):
user posted image


_____________
Обмен Ukash на WebMoney
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.