Как получить содержимое каталога и перейти на другой каталог с помощью PHP - PullRequest
0 голосов
/ 03 августа 2011

Я пытался сделать это без удачи.У меня есть скрипт php, который загружает и разархивирует файл.Здесь нет проблем.

После этого мне нужно получить разархивированные файлы и заменить все файлы корневого каталога на файлы в этой папке.Проблема в том, что папка находится в корневом каталоге.

Например: мой каталог выглядит примерно так

/
/folder 1
/folder 2
/folder 3
/file.php
/file2.php
etc...

После запуска сценария загрузки я распаковываю архив в папку с именем updateв корне каталога

/update/--UNZIPED STUFF--

Мне нужно удалить практически все файлы / каталоги из корневого каталога, за исключением папки обновления, которую, я думаю, и пару других файлов, а затем переместить файлы / папки внутри обновления.папка в корне каталога.

Есть идеи?

ОБНОВЛЕНИЕ

Хорошо, поэтому я сделалкод, который кажется правильным, но я получаю много разрешений на файл при использовании unlink или переименования.Как я могу это сделать?

Вот фрагмент кода, который я сделал

    echo '<table>';
    $updateContents = scandir('./');
    foreach($updateContents as $number=>$fileName){
    if($fileName != 'update' && $fileName != 'config.ini' && $fileName != 'layout.php' && $fileName != '..' && $fileName != '.' && $fileName != '.git' && $fileName != '.gitignore'){
        if(is_dir($fileName)){
          moveDownload($fileName, 'old/'.$fileName);
        } else {
          if(rename($fileName, 'old/'.$fileName)){
            echo '<tr><td>'.$fileName.' moved successfully </td><td><font color="green">OK</font></td></tr>';
          } else {
            echo '<tr><td>Could not move file '.$fileName.'</td><td><font color="red">ERROR</font></td></tr>';
          }
        }
      }
    }
    echo '</table>';

, и функция moveDownload - та, которую я где-то нашел здесь.Он перемещает непустую папку, и он был слегка изменен мной.

function moveDownload($src,$dst){ 
  $dir = opendir($src); 
  while(false !== ($file = readdir($dir))){ 
    if (($file != '.') && ($file != '..') && ($file != 'config.ini') && ($file != 'layout.php') && ($file != 'sbpcache') && ($file !='update')){ 
      if (is_dir($src.'/'.$file)){
        if(file_exists($dst.'/'.$file)){
          rrmdir($dst.'/'.$file);
        }
      }
      if(@rename($src . '/' . $file, $dst . '/' . $file)){
            echo '<tr><td>'.$file.' moved successfully </td><td><font color="green">OK</font></td></tr>';
      } else {
        if(@chmod($src.'/'.$file, 0777)){
          if(@rename($src . '/' . $file, $dst . '/' . $file)){
                echo '<tr><td>'.$file.' moved successfully </td><td><font color="green">OK</font></td></tr>';
          } else {
                echo '<tr><td>Could not move file '.$file.'</td><td><font color="red">ERROR RENAME</font></td></tr>';
          }
        } else {
            echo '<tr><td>Could not move file '.$file.'</td><td><font color="red">ERROR CHMOD</font></td></tr>';
        }
      }
    } 
  } 
  closedir($dir); 
}

Я также делаю то же самое снова, но перемещаюсь из папки обновлений.

Так что в основном сначала вместоудаляя вещи, я просто перемещаю их в папку с именем old, а затем пытаюсь переместить новые вещи, но везде возникают проблемы с разрешениями.Некоторые файлы перемещаются, некоторые нет, даже если у меня есть «sudo chmod 777 -R».Есть идеи?

Ответы [ 3 ]

0 голосов
/ 03 августа 2011

Почему бы вам просто не получить список всех каталогов / файлов в корневом каталоге, а затем просмотреть их, удалить их (используя unlink), игнорируя при этом каталог «backup».Затем вы можете запустить команду php copy ИЛИ shell_exec mv *, чтобы переместить файлы из резервной копии в корневую.

0 голосов
/ 03 августа 2011
  1. зачем использовать корневую папку.используйте /tmp
  2. в чем проблема с unlink / rmdir
0 голосов
/ 03 августа 2011

PHP opendir позволит вам перебирать все файлы и каталоги внутри корневого каталога. Вы можете использовать unlink, чтобы удалить файлы или папки и добавить условие if, чтобы проверить, должен ли элемент быть удален.

...