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

4

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

например, я загружаю изображение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']));
Загрузка файлов php НЕ проходит через $ _POST. Они проходят через $ _FILES и имеют совсем другую семантику обработки, чем любые другие поля формы. Marc B

Ваш Ответ

5   ответов
2

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

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']));
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
9

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

while (file_exists($fullpath)) {
    $info = pathinfo($fullpath);
    $fullpath = $info['dirname'] . '/'
              . $info['filename'] . $additional
              . '.' . $info['extension'];
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded$fullpathError: User Rate Limit Exceeded$additionalError: User Rate Limit Exceeded
$additionalError: User Rate Limit Exceededeach timeError: User Rate Limit Exceededrunning the code?
Error: User Rate Limit Exceededpathinfo
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
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);

Похожие вопросы