Мой код удаляет файл и переименовывает некоторые файлы, включая имя удаленного файла, в другой файл. Но этот код работает неожиданно. В чем проблема … Или что не так в моем коде …
отредактированный
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 ()
Конечный результат
Я действительно не понимаю, что происходит с моим кодом. Пожалуйста, кто-нибудь, помогите мне ..
Мое предложение; кешировать имена файлов:
$file1 = "var/www/magento/media/file1";
$file2 = "var/www/magento/media/file2";
$unresult = unlink($file1);
$reresult = rename($file2, $file1);
P.S: Код работает просто отлично, (я даже проверял это !!); но взгляните на следующее:
<?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
?>
Ваш код является функционально корректным, и я подозреваю, что «обновление файловой системы» является источником проблемы, однако, как вы уже сказали, проблема возникает иногда.
Кажется, что в 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]
история через картинки: