Uploading file with php

4

I'm using the following code:

$uploaddir = '../vagas/';
$uploadfile = $uploaddir . basename($_FILES['img']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Arquivo válido e enviado com sucesso.\n";
} else {
    echo "Possível ataque de upload de arquivo!\n";
}

echo 'Aqui está mais informações de debug:';
print_r($_FILES);

print "</pre>";

HTML is like this

<input type="file" name="img" id="img">

The error you display is Possible file upload attack! Here is more debug info: Array (     [img] = > Array         (             [name] = > download.jpeg             [type] = > image / jpeg             [tmp_name] = > / Applications / XAMPP / xamppfiles / temp / phpOPe968             [error] = > 0             [size] = > 5555         )

)

But you are not uploading, I already gave chmos to the server folder but anyway ... How can I solve? And if possible how could I rename the file? Thanks

    
asked by anonymous 19.10.2015 / 00:46

3 answers

2

After much research I found a web script that solved

HTML

<form method="post" action="recebe_upload.php" enctype="multipart/form-data">
  <label>Arquivo</label>
  <input type="file" name="arquivo" />

  <input type="submit" value="Enviar" />
</form>

PHP

<?php
// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'uploads/';
// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb
// Array com as extensões permitidas
$_UP['extensoes'] = array('jpg', 'png', 'gif');
// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
$_UP['renomeia'] = false;
// Array com os tipos de erros de upload do PHP
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
$_UP['erros'][4] = 'Não foi feito o upload do arquivo';
// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
if ($_FILES['arquivo']['error'] != 0) {
  die("Não foi possível fazer o upload, erro:" . $_UP['erros'][$_FILES['arquivo']['error']]);
  exit; // Para a execução do script
}
// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar
// Faz a verificação da extensão do arquivo
$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
if (array_search($extensao, $_UP['extensoes']) === false) {
  echo "Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif";
  exit;
}
// Faz a verificação do tamanho do arquivo
if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {
  echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
  exit;
}
// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
// Primeiro verifica se deve trocar o nome do arquivo
if ($_UP['renomeia'] == true) {
  // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
  $nome_final = md5(time()).'.jpg';
} else {
  // Mantém o nome original do arquivo
  $nome_final = $_FILES['arquivo']['name'];
}

// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
  // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
  echo "Upload efetuado com sucesso!";
  echo '<a href="' . $_UP['pasta'] . $nome_final . '">Clique aqui para acessar o arquivo</a>';
} else {
  // Não foi possível fazer o upload, provavelmente a pasta está incorreta
  echo "Não foi possível enviar o arquivo, tente novamente";
}
?>

The web page is BLOG thiagobelem

    
19.10.2015 / 13:48
6

Apparently the only problem I see in your script is that you have not specified the correct name of the temporary file:

You are:

$_FILES['userfile']['tmp_name']

Should be:

$_FILES['img']['tmp_name']

The rest are small details. I also see that you are using the same example of the php.net page a> , so I'd like to leave an explanation.

In the html form, you must specify the encoding type of the data sent from enctype .

<form enctype="multipart/form-data" action="" method="POST">
    <input name="img" type="file" />
    <input type="submit" name="enviar" value="Enviar" />
</form>

In the script responsible for this request, you must specify the name attribute of input of type file in variable _ $ FILES , both for name and also for tmp_name .

Variable $ _ FILES :

  • Local file name: $ _ FILES ['img'] ['name']
  • Temporary name of the file stored on the server: $ _ FILES ['img'] ['tmp_name']

Rights in directory:

  • 0755: All rights to owner, read and write to others.

For the script responsible for the request:

if(isset($_POST["enviar"])){
    $uploaddir = file_exists('../vagas/') ? '../vagas/' : mkdir('../vagas/', 0755, true);
    $uploadfile = $uploaddir . basename($_FILES['img']['name']);
    $permissao = (is_dir($uploaddir) && chmod($uploaddir, 0755)) ? true : die("A pasta de envio nao existe");
    echo '<pre>';
    if($permissao  && move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
        echo "Ficheiro valido, e enviado.\n";
    } else {
        echo "Erro: Ficheiro nao enviado!\n";
    }

    echo 'Informacao de debugging:';
    print_r($_FILES);

    print "</pre>";
}

Some references:

19.10.2015 / 13:04
4

HTML

<form action="" method="POST" enctype="multipart/form-data">
 <input type="file" name="img" id="img"><br />
 <input type="submit" name="img_ok" value="Enviar">
</form>

PHP

if($_POST["img_ok"]) {

    $tempname = $_FILES["img"]["tmp_name"]; // 
    $new_name = "nova_imagem"; // Novo nome do arquivo
    $extension = strtolower(pathinfo($_FILES["img"]["name"], PATHINFO_EXTENSION)); // Pega extensão de arquivo e converte em caracteres minúsculos.      
    $folder = "./vagas"; // Pasta onde será armazenada a imagem.

    if(!file_exists($folder)) { // Verifica se a pasta já existe.
        mkdir($folder, 0777, TRUE); // Cria a pasta.
        chmod($folder, 0777); // Seta a pasta como modo de escrita.
    }

    if(move_uploaded_file($tempname, $folder."/".$new_name.".".$extension)) { // Move arquivo para a pasta em questão e com o novo nome.
        echo "Arquivo válido e enviado com sucesso.\n";
    } else echo "Possível ataque de upload de arquivo!\n";
}
    
19.10.2015 / 11:28