Почему переименование PHP ($ file) все еще удаляет файлы? - PullRequest
0 голосов
/ 18 декабря 2018

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

В зависимости от буфера вывода, он работает нормально.Когда я смотрю в папке, это файлы 11-99 отсутствует.Я заменил функцию переименования своей собственной функцией ниже, однако я получаю точно такие же результаты.

Код:

function rename_files($directory){
  $path = 'C:\xampp\htdocs\email' . '\\' . $directory . '\\';

  $x = 00001;

 foreach (glob($path."*") as $filename) {
     $newFile = $path . 'list' . $x . '.txt';
     $content = file_get_contents($filename); //this function returns the content of a file.
     echo "$newFile and old $filename<br>";
     unlink($filename);

     $file = fopen($newFile, "w");
     fwrite($file,$content);
     fclose($file);
     ++$x;
  }
}

Вывод: PHP Output Buffer

Реальность:

Actual Files Created In The Folder

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Ваша основная проблема в том, что ваш исходный и целевой каталог одинаковы, а имена старых и новых файлов совпадают.

Просмотр первых двух строк вашего вывода должен показать вам проблему.Вновь созданный файл list1.txt удаляется во второй итерации цикла.

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

0 голосов
/ 18 декабря 2018

Некоторые из ваших новых имен файлов совпадают со старыми именами файлов.

Вы переименовали list103 (2).txt в list11.txt.Это переписало оригинал list11.txt.Позже вы переименовали list11.txt в list25.txt.

В результате оригинал list11.txt потерян.

Это происходит снова и снова: list1 (2).txt -> list1.txt -> list2.txt

Вам нужно проверить, существует ли $newFile, и использовать другое имя, которое не существует.Или, возможно, использовать разные соглашения об именах для старых и новых файлов, чтобы они не могли конфликтовать друг с другом.

...