На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > print_r или var_dump удаляет пустые папки. Как и почему?
      Написал функцию для поиска файлов. Вроде бы работает хорошо. На её основе написал функции поиска по типу файла, поиск пустых папок, построение списка с превьюшкой для полученных результатов. Был всем доволен пока не вернулся случайно к функции поиска файлов. У меня все Функции собраны в одном файле и вызываются кнопкой. Случайно нажал и заметил, что пустые папки удалились. Пока не взялся за написание функции для поиска пустых папок, я таковые не создавал, потому видимо раньше и не замечал такое поведение. Помучавшись, вырезал функцию в отдельный файл и там после ряда проверок выяснил, что удаляет папки либо после проверки print_r или var_dump массива, ответственного за хранение ссылок на картинки превью, либо после пробы вывести превью. Причем проверки срабатывают, превью выводится, а пустые папки удаляются. С другими функциями, написанными на основе этой такого нет. Почему такое происходит понять не могу. Вроде нигде не написано. что подобное может удалять папки, да и вообще что-либо. В мануалах только про rmdir написано. Она то может удалять именно пустые папки, потому и функция под это пишется легко, но тут то я её не вызываю.
      Код вот такой:
      ExpandedWrap disabled
        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);

      Подскажите , пжл, причину и как это обойти.
      Сообщение отредактировано: D-G -
        1) Почему-то обратил внимание, что в основном удаляет ссылаясь на глобальную переменную $pic_on. Попробовал бы сделать print_r($pic_on); сразу после их объявления, посмотреть, что там внутри
        2) Попробуйте закомментировать весь блок foreach и сделать print_r($pic_on); сразу после global $pic_on; global $parth_on;
        3) Попробуйте закомментировать весь блок foreach и выполнить код
        ExpandedWrap disabled
          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.

        В общем-то подебажил: потестировал разные гипотезы.
        Сообщение отредактировано: Костик+ -
          1) Для удобного поиска файлов есть symfony/finder
          2) Для не очень удобного есть glob и DirectoryIterator

          ExpandedWrap disabled
            var_dump(glob(__DIR__ . '/*.php'));
          user posted image user posted image
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script Execution time: 0,0742 ]   [ 14 queries used ]   [ Generated: 21.11.19, 13:50 GMT ]