Мой код удаляет файл и переименовывает некоторые файлы, включая имя удаляемого файла, в другой файл. Но этот код работает неожиданно. Какая проблема... Или что не так в моем коде..
отредактированный
5 файлов
file1.jpg,file2,jpg,file3.jpg,file4.jpg,file5.jpg
$target = 2; //target file to delete
$total = 5; //total files
$name = 'file';
unlink($name.$target.".jpg");//deleting
usleep(10000000);//to find deleted or not afterdelete
for($i = $target+1;$i<=$total;$i++)
{
rename($name.$i.".jpg" , $name.($i-1).".jpg");
}
Мой ожидание
file2 have to be deleted , then
file3.jpg rename to file2.jpg
file4.jpg rename to file3.jpg
file5.jpg rename to file4.jpg
Но результат не тот, который я ожидал.
Результат
- file2.jpg deleted.correctly.("I am sure i put usleep() after unlink(),the image deleted")
- file3.jpg renamed to file2.jpg but the file3 content has file2.jpg content
- file4.jpg renamed to file3.jpg
- file5.jpg renamed to file4.jpg
иногда это работает, как я ожидал, но иногда нет,
-file3 renamed to file2
-file4 renamed to file3
-file5 renamed to file4 but have file3 content
Каждый раз, когда он работает неожиданно и по-разному
Первоначально
После удаления между Usleep()
Конечный результат
Я действительно не понимаю, что происходит для моего кода. Пожалуйста, помогите мне..
Ваш код функционально корректен, и я подозреваю, что "обновление файловой системы" является причиной проблемы проблемы, однако, как вы уже сказали, проблема возникает иногда.
Похоже, что в PHP нет встроенной функции обновления "файловой системы", однако следующее - это просто работа, но будет делать трюк: начиная с "обновления", после процесса переименования просто создайте временную пустой файл, а затем удалите его! На протяжении всего моего теста (я также тестировал его в Windows), "изредка" наречие изменилось на "никогда"!
файлы - file_1.png, file_2.png, file_3.png, file_4.png, file_5.png
, имеющие суффикс числа в качестве содержимого файлов.
<?php
$target = 2; //target file to delete
$total = 5; //total files
$name = 'file_';
$fileToDelete = "$name$target.png";
unlink($fileToDelete); //delete
echo "Deleted: $fileToDelete<br/>";
for($i = $target+1; $i<=$total; $i++)
{
$prev = $i-1;
$from = "$name$i.png";
$to = "$name$prev.png";
rename($from , $to);
echo "file renamed: [$from -> $to]<br/>";
}
// refresh the file system!!
file_put_contents("tmp","");
unlink("tmp");
?>
Выход:
Deleted: file_2.png
file renamed: [file_3.png -> file_2.png]
file renamed: [file_4.png -> file_3.png]
file renamed: [file_5.png -> file_4.png]
история через картины:
Мое предложение; кешировать имена файлов:
$file1 = "var/www/magento/media/file1";
$file2 = "var/www/magento/media/file2";
$unresult = unlink($file1);
$reresult = rename($file2, $file1);
PS: Код работает нормально, (я даже проверял его!); но взгляните на следующее:
<?php
$file1 = "file1.txt";
$file2 = "file2.txt";
// insert some contents into each file
file_put_contents($file1, "AAAA");
file_put_contents($file2, "BBBB");
// delete the first file, and then rename the second one to "file1"
$unresult = unlink($file1);
$reresult = rename($file2, $file1);
// now that the file is renamed, then there should be "BBBB" in the file named "file1.txt"
echo file_get_contents($file1); // Outputs: BBBB
?>