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
?>
Have you tried htacess ?
– João Victor Gomes Moreira
On the error Else put
error_get_last();
this function will return an array, see if it returns something related to the error.– rray
The easiest way to check if it is really the file size the problem is to modify the . htacess by adding these lines
– João Victor Gomes Moreira
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".
– Diego
Of such a
print_r(error_get_last());
– rray