Upload a file with php

Asked

Viewed 2,327 times

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>";

The HTML is like this

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

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

)

But it is not uploading, already gave chmos in the folder of the server but still... How can I fix it? And if possible how could I rename the file ? Thank you

  • If you don’t have multi-part in the form it doesn’t send the file.

  • ok put but memo like this nothing

  • 2

    In the move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile) shouldn’t be sending $_FILES['img']['tmp_name'] instead of $_FILES['userfile']['tmp_name'] ?

  • as Thyago did not understand the suggested amendment

  • you need to use the same as in the form, no $_FILES, in the form is img and in the $_FILES is userfile, use @+usuario to notify him.

  • Yes, I have, but to no avail....

  • Well, within what you’ve given us so far, I’ve posted an answer for better visualization of the code.

Show 2 more comments

3 answers

6

Apparently the only problem I see in your script is the fact that you didn’t specify in name correct temporary file:

Is:

$_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 from the php.net, so I’d like to leave an explanation.

On the form html, the type of coding of the data sent from the 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, the attribute must be specified name of input of the kind file in the variable _$FILES, so much for the name as well as for the tmp_name.

Variable $_FILES:

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

Rights in the directory:

  • 0755: All rights to the 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:

  • friend is returning it to me : The shipping folder does not exist

  • and directories are with permission 777

  • Try creating the folder manually first.

  • she was already created manually .....

  • There were some spelling errors in my sample code, try again. If you return error again on the first try, just refresh the page.

  • friend even though it didn’t work, but I found a solution in a web page, I will post... Thank you

  • It’s really weird, because here it’s working normally.

  • also found because in another project I worked with a similar script and was ok

Show 3 more comments

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";
}
  • he returned me Possible file upload attack! @+Thyago Thysoft

2


After a lot of research I found a script on the web 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

  • Good morning Friend, if you need to upload to another server, please follow the link http://answall.com/a/40709/15776

  • That’s not the case, but thank you and nice to meet.....

  • Augusto, I’m glad I was able to fix it, but to tell you the truth, this script you posted has the same functionality as me and @Edilson posted, almost sure that the problem was in the way that in this script posted by you is like this: $_UP['pasta'] = 'uploads/'; Just for the record, these absolute and relative path schemes always suck and I believe that this was the ultimate problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.