A função move move um arquivo para uma nova localização sem sobrescrever um arquivo existente acrescentando um número incremental entre o nome e extensão do arquivo movido.
Se você quer fazer upload de arquivos sem alterar o nome original do arquivo enviado move é uma ótima opção.
Exemplos:
Arquivo
// primeira vez
move('images/bg.jpg', 'images/background/bg.jpg');
// images/background/bg.jpg
// segunda vez, supondo que bg.jpg foi recolocado no diretório images
move('images/bg.jpg', 'images/background/bg.jpg');
// images/background/bg-1.jpg
// terceira vez
move('images/bg.jpg', 'images/background/bg.jpg');
// images/background/bg-2.jpg
Upload
move($_FILES['arquivo']['tmp_name'], 'uploads/'.$_FILES['arquivo']['name']);
Move substitui move_uploaded_file? Sim. Arquivos enviados são armazenados em um diretório temporário definido pelo servidor, como por exemplo no Linux o /tmp por padrão. Mover arquivos de /tmp ou de um outro diretório qualquer é a mesma coisa, sempre que o usuário tenha as permissões necessárias no diretório.
Código fonte
<php
/**
* Move
*
* @author Alejandro Fernandez Moraga <moraga86@gmail.com>
* @param string $filename Arquivo
* @param string $destination Destino do arquivo
* @return string|false
*/
function move($filename, $destination) {
# separa diretório e nome do arquivo da extensão usando expressão regular
$name = preg_split('#(?:\.([^\.]+))?$#', $destination, -1, PREG_SPLIT_DELIM_CAPTURE);
# array com informações do arquivo
$meta = array($name[0], '', $name[1] ? '.' : '', $name[1]);
# laço percorre o diretório destino procurando por arquivos com mesmo nome
# acrescenta um valor incremental entre o nome e extensão do arquivo
# quando um arquivo de mesmo nome é encontrado
for ($i=0; file_exists($file = implode($meta)); $meta[1]=--$i);
# renomeia o arquivo
# retorna o nome do arquivo movido ou falso
return rename($filename, $file) ? $file : false;
}
?>