4

Вопрос по file-exists, php – php проверьте имя файла существует, переименуйте файл

Как проверить, существует ли имя файла, переименовать файл?

например, я загружаю изображение1086_002.jpg если файл существует, переименуйте файл как1086_0021.jpg и сохранить, если1086_0021.jpg существует, переименуйте1086_00211.jpg и сохранить, если1086_00211.jpg существует, переименуйте1086_002111.jpg и сохранить ...

Вот мой код, это может сделать только если1086_002.jpg существует, переименуйте файл как1086_0021.jpgМожет быть, следует сделать foreach, но как?

//$fullpath = 'images/1086_002.jpg';

if(file_exists($fullpath)) {
    $newpieces = explode(".", $fullpath);
    $frontpath = str_replace('.'.end($newpieces),'',$fullpath);
    $newpath = $frontpath.'1.'.end($newpieces);
}

file_put_contents($newpath, file_get_contents($_POST['upload']));
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded$additional++Error: User Rate Limit Exceeded$additionalError: User Rate Limit Exceeded1Error: User Rate Limit Exceededrun till it times outError: User Rate Limit Exceeded

    от
  • $additionalError: User Rate Limit Exceededeach timeError: User Rate Limit Exceededrunning the code?

    от
  • Error: User Rate Limit Exceeded$fullpathError: User Rate Limit Exceeded$additionalError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededpathinfo

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Загрузка файлов php НЕ проходит через $ _POST. Они проходят через $ _FILES и имеют совсем другую семантику обработки, чем любые другие поля формы.

    от Marc B
5 ответов
  • 1

    надеюсь, это поможет

    $fullPath = "images/1086_002.jpg" ;
    $fileInfo = pathinfo($fullPath);
    list($prifix, $surfix) = explode("_",$fileInfo['filename']);
    $x = intval($surfix);
    $newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT)  . $fileInfo['extension'];
    while(file_exists($newFile)) {
        $x++;
        $newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT)  . $fileInfo['extension'];
    }
    
    file_put_contents($newFile, file_get_contents($_POST['upload']));
    

    Надеюсь, это поможет

    Спасибо

    :)

  • 0

    Вы можете изменить свой

    if заявление кwhile цикл:

    $newpath = $fullpath;
    while(file_exists($newpath)) {
        $newpieces = explode(".", $fullpath);
        $frontpath = str_replace('.'.end($newpieces),'',$fullpath);
        $newpath = $frontpath.'1.'.end($newpieces);
    }
    
    file_put_contents($newpath, file_get_contents($_POST['upload']));
    

  • 9

    Попробуйте что-то вроде:

    $fullpath = 'images/1086_002.jpg';
    $additional = '1';
    
    while (file_exists($fullpath)) {
        $info = pathinfo($fullpath);
        $fullpath = $info['dirname'] . '/'
                  . $info['filename'] . $additional
                  . '.' . $info['extension'];
    }
    

  • 1

    Я чувствую

    что так будет лучше. Это поможет отследить, сколько раз был загружен файл с тем же именем. Он работает так же, как Windows OS переименовывает файлы, если находит файл с таким же именем.

    Как это работает: еслиmedia В каталоге есть файл с именем002.jpg и вы пытаетесь загрузить файл с тем же именем, он будет сохранен как002(1).jpg Другая попытка загрузить тот же файл сохранит новый файл как002(2).jpg

    Надеюсь, поможет.

    $uploaded_filename_with_ext = $_FILES['uploaded_image']['name'];
    $fullpath = 'media/' . $uploaded_filename_with_ext;
    $file_info = pathinfo($fullpath);
    $uploaded_filename = $file_info['filename'];
    
    $count = 1;                 
    while (file_exists($fullpath)) {
      $info = pathinfo($fullpath);
      $fullpath = $info['dirname'] . '/' . $uploaded_filename
      . '(' . $count++ . ')'
      . '.' . $info['extension'];
    }
    $image->save($fullpath);
    

  • 2

    Почему бы просто не добавить метку времени к имени файла? Тогда вам не

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