Changing the identification data of a file at upload

0

I'm trying to rename a file according to what the user provides, but an error occurs but is given as $_FILES["arquivo_foto"]["error"] -> 0

Shipping Script

<?php


$diretorioimagens = "arquivos/image/";
$uploadarquivo = $diretorioimagens . basename($_FILES["arquivo_foto"]["name"]);
$novonome = $_POST["novo_nome_foto"];
echo $novonome;
$_FILES["arquivo_foto"]["tmp_name"] = $novonome;
if($_FILES["arquivo_foto"]["size"] < 62914560){
    if(move_uploaded_file($_FILES["arquivo_foto"]["tmp_name"], $diretorioimagens)){
        echo "Enviado com sucesso com o nome " . $_FILES["arquivo_foto"]["tmp_name"];
    }else{
        echo "Não foi possível enviar o arquivo, mais detalhes do erro abaixo <br>" . $_FILES["arquivo_foto"]["error"];
    }
}else{
    echo "Arquivo ultrapassa 60Mb";
};

?>

Photo submission form

<form method="post" enctype="multipart/form-data" action="envia_foto.php">
            <div>
                <label>Pré-visualização</label>
                <img src="" alt="Pré-visualização da imagem enviada">
            </div>
            <label>Nome do arquivo:
                <input type="text" name="novo_nome_foto" placeholder="Nome do arquivo">
            </label>
            <label>
            <input type="hidden" value="62914560" name="">
                <input type="file" name="arquivo_foto" placeholder="Arquivo">
            </label>
            <button type="submit">Enviar</button>
        </form>

What's wrong, and how can I fix it?

    
asked by anonymous 12.05.2017 / 17:09

1 answer

2

The error is in this line:

$_FILES["arquivo_foto"]["tmp_name"] = $novonome;

To change the file name, do not modify tmp_name, change the name at the time of copying it to the definitive location, in the move_uploaded_file function:

move_uploaded_file($_FILES["arquivo_foto"]["tmp_name"], $diretorioimagens . $novonome)

And it's very important that you filter the new name to avoid confusion in your file system, or attempt to save to a different folder with something like:

// remove tudo que não for palavra, espaço, numero ou -_~,;[]()
$novonome = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $novonome);
// remove pontos corridos 
$novonome = mb_ereg_replace("([\.]{2,})", '', $novonome);
    
12.05.2017 / 17:22