Reputation: 145
need to copy and then rename the copy of a file if it already exists
$pastaTemp = $_FILES['imagem_principal']['tmp_name'];
$pastaUpload = $_SERVER['DOCUMENT_ROOT']."/casaunica/imagens/acabamentos/";
$arquivo = $pastaUpload . $_FILES['imagem_principal']['name']; //filename.jpg
if(!file_exists($pastaUpload. $_FILES['imagem_principal']['name'])){
$arquivo = $pastaUpload . $_FILES['imagem_principal']['name'];
} else {
$nome_arquivo = explode(".",$_FILES['imagem_principal']['name']);
do {
$para = $nome_arquivo[0]."_".$i.".".$nome_arquivo[1];
$nome_novo = rename($arquivo, $pastaUpload . $para);
$arquivo = $pastaUpload .$nome_novo;
$i++;
} while(file_exists($pastaUpload.$_FILES['imagem_principal']['name']));
}
output: filename.jpg_1
it should be: filename_2.jpg
it can't replace the old file.. that's why i need to rename with a number it doesn't need to be made in a loop but everytime that a file is uploaded
Upvotes: 0
Views: 190
Reputation: 1794
Try this code, let me know if it works
Function
<?php
function recursive_naming( $file, $i = 1 ) {
$dirname = dirname( $file ).DIRECTORY_SEPARATOR;
$filename = pathinfo( $file, PATHINFO_FILENAME );
$extension = pathinfo( $file, PATHINFO_EXTENSION );
if ( !file_exists( $file ) ) {
return $file;
}
$filename = preg_replace( '/_\d+$/', '', $filename );
$file = $dirname.$filename."_".$i.".".$extension;
$i++;
return recursive_naming( $file, $i );
}
?>
Example:
<?php
$pastaTemp = $_FILES['imagem_principal']['tmp_name'];
$pastaUpload = $_SERVER['DOCUMENT_ROOT']."/casaunica/imagens/acabamentos/";
$arquivo = recursive_naming( $pastaUpload.$_FILES['imagem_principal']['name'] );
?>
It will output filename_2.jpg
if filename.jpg
exists, or filename_3.jpg
if filename_2.jpg
also exists, and so on...
Upvotes: 1