PHP файл переименование таинственный без ошибок изображения не теряется

Я получил кучу фотографий со случайными именами, я хочу опубликовать их в Интернете, поэтому они должны быть переименованы в 1.jpg, 2.jpg, 3.jpg и т. Д .;

Я написал следующий код, чтобы добиться этого

$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname   = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, $path.'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}

и случилась магия: после запуска этого скрипта в папке было 22 файла, из которых остались только 14 фото с именами 1.jpg, 10.jpg до 22.jpg, когда я снова обновился, осталось только 6 фото с именами от 1.jpg до 6 .jpg Теперь на этом этапе они не изменились даже после обновления снова и снова.

Я пытался комментировать rename($oldname, $path.'/'.($i).'.'.'jpg');просто чтобы увидеть, какие старые имена и новые имена генерируются, и они были совершенно нормальными, как и то, что старое имя новое, генерируется то, что я хотел 1.jpg to 22.jpg

Я попробовал почти тот же кусок кода, чтобы изменить расширение .JPG на расширение .jpg, так как сервер Linux чувствителен к регистру имен файлов, в то время как Windows не всегда хорошо работал с этим кодом;

if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname   = $path.'/'.$file;
$path_info = pathinfo($oldname);
echo $sub= substr($file,0,-4);
echo "<br>";
rename($oldname, $path.'/'.($sub).'.'.'jpg');
}
}
closedir($handle);
}

В 2:40 утра утра в Индии, и я просто студент, эта проблема не позволяет мне перейти в спящий режим, пожалуйста, помогите мне.

0

Решение

После циклического переосмысления () я понял, почему этот фрагмент кода не работает и почему он работает для переименования расширения.

Функция переименования принимает 2 параметра: старое имя файла и новое имя с местоположением, она также может перемещать файлы, если уже существует файл с таким же именем в новом месте или в том же месте, он просто перезапишет его и не будет проходить через любая ошибка

Чтобы понять это, давайте возьмем для примера 22 изображения в папке с фотографиями с именами от 1.jpg до 22.jpg, но в случайном порядке, например 1.jpg, 10.jpg, 15.jpg и т. Д.

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

Теперь вы скажете, почему образ взлома имеет вид 1.jpg, 10.jpg и если существует 2.jpg, то почему они не упорядочены как 1.jpg и 2.jpg?
Ответ прост: некоторые картинки имеют .jpg, а некоторые .JPG фото с .JPG имеют преимущество.

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

<?php
$path="test";
$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname   = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, "tmp".'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>"."tmp".'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}
$path="tmp";
$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname   = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, "test".'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}
?>

и спасибо всем, что не помогли мне, просто из-за тебя я сделал это сам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]