Error uploading files in Ubuntu with PHP

0

Hello, I'm using a simple file upload system with PHP and some problems will arise regarding the necessary permissions to use in ubuntu

This is the first time I'm using it, with the Webmin tool and I do not know what permissions to use, much less how to give them.

My upload code:

if ( isset( $_FILES[ 'anexo' ][ 'name' ] ) && $_FILES[ 'anexo' ][ 'error' ] == 0 ) {

// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = '/../../arquivos_subidos/'; 
// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb
// Array com as extensões permitidas
$_UP['extensoes'] = array('docx', 'pdf', 'xls', 'xlsx');
// Renomeia o arquivo? (Se true, o arquivo será salvo como (nome unico + .docx)
$_UP['renomeia'] = true;
// 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['anexo']['error'] != 0) {
  return $templates->render->erro("Não foi possível fazer o upload, erro:" . $_UP['erros'][$_FILES['anexo']['error']]); // 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
$separaExtensao = explode('.', $_FILES['anexo']['name']);
$pegaUltimaExtensao = end($separaExtensao);
$extensao = strtolower($pegaUltimaExtensao);

if (array_search($extensao, $_UP['extensoes']) === false) 
   return $templates->render->erro("Por favor, envie arquivos com as seguintes extensões: docx, pdf ou xls");    

// Faz a verificação do tamanho do arquivo
if ($_UP['tamanho'] < $_FILES['anexo']['size']) 
    return $templates->render->erro("O arquivo enviado é muito grande, envie arquivos de até 2Mb.");

// 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 
  $nome_final = md5(time()."$@(DU@$#%%").".".$extensao;
} else {
  // Mantém o nome original do arquivo
  $nome_final = $_FILES['anexo']['name'];
}

// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['anexo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
  return $templates->render->sucesso("O arquivo foi enviado com sucesso.");
} else {
  // Não foi possível fazer o upload, provavelmente a pasta está incorreta
    return $templates->render->erro("Não foi possivel fazer o upload do arquivo, tente novamente");

}

}

PHP returns me the following error:

  

Warning:   move_uploaded_file (/../../_subbed files / 13d0bd5da89e48105287dfba2e773163.docx):   failed to open stream: No such file or directory in   /var/www/html/core/ajax/novaProposal.php on line 81

     Warning: move_uploaded_file (): Unable to move '/ tmp / phpljFq6X' to   '/../../followers/13d0bd5da89e48105287dfba2e773163.docx' in   /var/www/html/core/ajax/novaProposal.php on line 81

My idea: uploaded files do not get where php runs, inside the / var / www folder I created a call "uploaded files", but I do not know how to configure the necessary permissions for the upload to be done successfully. p>

In the Windows environment this script works correctly.

    
asked by anonymous 22.03.2017 / 13:48

1 answer

0

What I saw your problem is with the permissions of the Linux file system (something that windows does not do so it works) if I'm not mistaken you need to give permissions in that folder for APACHE to write then you can give ownership from this directory to apache with the command sudo chown www-data:www-data caminho/da/pasta or give full permission to the sudo chmod -R 777 caminho/da/pasta folder the latter is not very recommended since any user can change the contents of that folder. You must give apache permission because it is he who executes your PHP script, so it is he who needs write permission in that folder. I hope it has become clear.

    
22.03.2017 / 13:55