Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.237.221] |
|
Сообщ.
#1
,
|
|
|
Написал функцию для поиска файлов. Вроде бы работает хорошо. На её основе написал функции поиска по типу файла, поиск пустых папок, построение списка с превьюшкой для полученных результатов. Был всем доволен пока не вернулся случайно к функции поиска файлов. У меня все Функции собраны в одном файле и вызываются кнопкой. Случайно нажал и заметил, что пустые папки удалились. Пока не взялся за написание функции для поиска пустых папок, я таковые не создавал, потому видимо раньше и не замечал такое поведение. Помучавшись, вырезал функцию в отдельный файл и там после ряда проверок выяснил, что удаляет папки либо после проверки print_r или var_dump массива, ответственного за хранение ссылок на картинки превью, либо после пробы вывести превью. Причем проверки срабатывают, превью выводится, а пустые папки удаляются. С другими функциями, написанными на основе этой такого нет. Почему такое происходит понять не могу. Вроде нигде не написано. что подобное может удалять папки, да и вообще что-либо. В мануалах только про rmdir написано. Она то может удалять именно пустые папки, потому и функция под это пишется легко, но тут то я её не вызываю.
Код вот такой: function find_all_files($dir) { global $pic_on; global $parth_on; $root = scandir($dir); foreach($root as $value) // перебираем { if($value === '.' || $value === '..') {continue;} // пропускаем if(is_dir($dir.'/'.$value)) find_all_files($dir.'/'.$value); // если директория, то продолжаем сканировать if(is_dir($dir.'/'.$value)) continue; $parth_on[] = $dir.'/'.$value; $path=$dir.'/'.$value; //эту переменную на всякий случай сделал, пробовал её в ссылку вставлять, все равно удаляет // echo $path; echo '<br>'; // Эта проверка не удаляет $pic_on[]='<img src="'.$dir.'/'.$value.'" width="10%" height="10%" >'; // В таком виде для передачи в список, только проценты увеличить // print_r($parth_on); echo '<br>'; // эта проверка не удаляет // print_r($pic_on); // эта удаляет // var_dump($pic_on); // эта удаляет } } $dir='.'; find_all_files($dir); Подскажите , пжл, причину и как это обойти. |
Сообщ.
#2
,
|
|
|
1) Почему-то обратил внимание, что в основном удаляет ссылаясь на глобальную переменную $pic_on. Попробовал бы сделать print_r($pic_on); сразу после их объявления, посмотреть, что там внутри
2) Попробуйте закомментировать весь блок foreach и сделать print_r($pic_on); сразу после global $pic_on; global $parth_on; 3) Попробуйте закомментировать весь блок foreach и выполнить код function find_all_files($dir) { global $pic_on; global $parth_on; $root = scandir($dir); $pic_on[] = '<img src="./." width="10%" height="10%" >'; $pic_on[] = '<img src="./.." width="10%" height="10%" >'; print_r($pic_on); } $dir='.'; find_all_files($dir); 4) Попробуйте заменить код foreach($root as $value) на foreach($root as $key => $value) 5) Пеменную $parth_on, скорее всего, хотели назвать по другому: или $part_on, или $path_on. В общем-то подебажил: потестировал разные гипотезы. |
Сообщ.
#3
,
|
|
|
1) Для удобного поиска файлов есть symfony/finder
2) Для не очень удобного есть glob и DirectoryIterator var_dump(glob(__DIR__ . '/*.php')); |