Move_uploaded_files() does not pass the file

Asked

Viewed 405 times

0

I’m putting together a file-exchange system here for the company, but I’m making a strange mistake, to say the least. Some files, mainly PDF, it doesn’t even pass to the SalvarArquivo.php. The variable simply arrives empty.

What I noticed is that these files are a "little" larger, something in the 15 to 30mb range. Smaller files work normally. The worst that the intention is to be able to upload up to 5GB....

What I tried:

PHP.ini - Set max_upload to 1 GB and time to 3600 seconds;
phpmyadmin.conf - I also set to 1GB and the time to 3600 seconds.

When I tried for a catch exception when returned the error in move_uploaded_file() just returned "Unable to move file".

Follows the form:

             <form id="cadastro" name="cadastro" enctype="multipart/form-data" method="POST" action="SalvarArquivo.php" onsubmit="salvar.disabled = true; salvar.value='AGUARDE...'; return true;">
                 <center><input type="email" name ="email_remetente" id="email_remetente" placeholder="Digite o seu email" required>
                         <input type="email" name ="email_destinatario" id="email_destinatario" placeholder="Digite o email do destinatário" required><br>
                         <input type="file" id="arquivo" name="arquivo" size="60" required>
                         Andamento:<br><progress id="progressbar" value="0" max="100"></progress><br>

                         <input type = "submit" id="salvar" name="salvar" onclick="javascript:upload();" value = "ENVIAR!" class="btn">

                 </center>
            </form>

And this is PHP:

<?php
/* Arquivo: SalvarArquivo.php
 *
 * Este script salva o arquivo enviado e gera o link para envio por email.
 *
 * Dados de Origem: index.php
 *
 */

// Dados do banco
include "js/conn.php";

//Gera nome aleatório para cada arquivo
$tamanho = mt_rand(5,9);
$all_str = "abcdefghijlkmnopqrstuvxyzwABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$nome = "";
for ($i = 0;$i <= $tamanho;$i++){
   $nome .= $all_str[mt_rand(0,61)];
}
//endereços de emails para envio e do remetente
$email_remetente = $_POST['email_remetente'];
$email_destinatario = $_POST['email_destinatario'];
//ip do cliente
$ip_envio = $_SERVER["REMOTE_ADDR"];

// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'BASE/';

// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 52428800; // 5GB

// Array com as extensões permitidas
$_UP['extensoes'] = array('pdf', 'doc', 'xls', 'xlsx', 'docx', 'html', 'zip', 'rar', 'jpg', 'jpeg', 'png', 'iso');
echo $_UP['extensoes'];
// 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) {
            //enviar aviso de extensão inválida
            ?>
            <script language="JavaScript">
            <!--
            alert("Extensão <? print($extensao); ?> não permitida.");
            window.location = '/upload/';
            //-->
            </script>
            <?
            exit;
}

// Faz a verificação do tamanho do arquivo
else if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {
  echo "O arquivo enviado é muito grande, envie arquivos de até 5 GB.";
}
// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
else {
// 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 = time().'.jpg';

} else {

//Grava o numero mais a extensão verificada no inicio do arquivo
$nome_final = $nome.'.'.$extensao;
// 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

//link para o arquivo enviado
$server = "http://pcn-sig02.peccin.local/upload/";
$anexo = $server.$_UP['pasta'].$nome_final;

include ("EnviarEmail.php");
//echo '<br><a href="'.$anexo.'">Baixar anexo</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";
echo $_FILES['arquivo']['error'];
}

}// FECHA ELSE VERIFICAÇÕES
?>
  • 1

    Have you tried htacess ?

  • 1

    On the error Else put error_get_last(); this function will return an array, see if it returns something related to the error.

  • 1

    The easiest way to check if it is really the file size the problem is to modify the . htacess by adding these lines

  • 2

    Victor Gomes, I added his lines to an htacess and it worked. For some reason he didn’t accept what I set in php.ini. Thank you! @rray put error_get_last() but it only returned "Array".

  • Of such a print_r(error_get_last());

No answers

Browser other questions tagged

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