Error while uploading files to Ubuntu with PHP

Asked

Viewed 676 times

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

It’s the first time I’m using the same, with the Webmin tool and I don’t know what permissions to use, let alone 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(/../../archive_subidos/13d0bd5da89e48105287dfba2e773163.docx): failed to open stream: No such file or directory in /var/www/html/core/ajax/novaProposta.php on line 81

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

My idea: the uploaded files don’t stay where php runs, inside the /var/www folder I created a call called "file files", but I don’t know how to configure the necessary permissions for the upload to be done successfully.

In Windows environment this script works properly.

1 answer

0


From what I saw your problem is with the permissions of the linux file system (thing that windows does not so it works) if I am not mistaken Oce need to give permissions in this folder for APACHE to write then Voce can give the possession of this directory to apache with the command sudo chown www-data:www-data caminho/da/pasta or give full permission to the folder sudo chmod -R 777 caminho/da/pasta this last one is not very recommended as any user will be able to change the contents of that folder. You should give apache permission because it is he who runs your PHP script, so he is the one who needs write permission in this folder. I hope that’s clear.

  • Good morning, thank you! I executed the command and the upload was done successfully

Browser other questions tagged

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