Meu sistema de upload não funciona com arquivos grandes.
Olá pessoal, sou novato aqui e também sou novato em programação PHP, mas criei um sistema pra upload múltiplo de arquivos pro meu site e até então ele estava funcionando perfeitamente, só que eu quis incrementar liberando níveis de conta de usuário. Dependendo do nível da sua conta você pode fazer upload de vídeos também, com limite pro tamanho de cada um dos vídeos enviados, inclusive, usando o MAX_FILE_SIZE.
Bom, o caso é que upload de arquivos com até 10Mb ele aceita numa boa, mas tento enviar arquivos de 20Mb pra cima e ele quando chega em 100% do upload redireciona pro meu index.php, sendo que esse index.php que ele redireciona nem é o que está dentro do diretório em que se encontram estes scripts de upload, ele redireciona pro meu domínio principal e não pro diretório com estes arquivos, compreende? É doideira pura mesmo.
Eu to sem saber o que fazer, já tentei até mesmo colocar o set_time_limit(0) pensando que talvez pelo arquivo enviado ser grande demais e o upload ser demorado pudesse estar dando erro no tempo de execução do script, mas não adiantou. Também setei o MAX_FILE_SIZE pra 80Mb (83886080 Bytes) e tentei enviar um arquivo de 20Mb, mas ainda acontece o mesmo de redirecionar pro meu domínio principal.
Outro ponto é que ele conecta no banco de dados e modifica lá na conta do cara que ta enviando os vídeos e calcula qual o tamanho do vídeo que enviou, formata com o number_format() e envia esse valor pro banco de dados, porque ele tem limite de espaço de armazenamento, então ele vai somando esses tamanhos dos uploads até alcançar o limite e então bloqueia o envio.
Bom, esse aqui é o meu formulário de enviar os vídeos:
formulario.php
<?
set_time_limit(0);
include "config.php";
$BE_LOGIN = $_COOKIE["login"];
$BE_PASSWORD = $_COOKIE["senha"];
$db = mysql_connect ($host, $login_db, $senha_db);
$basedados = mysql_select_db($database);
$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE login = '$BE_LOGIN' AND senha = '$BE_PASSWORD'", $db);while ($row = mysql_fetch_array($confirmacao)) {
$conta_imagem = $row["conta_imagem"];
$tamanho_imagem = $row["tamanho_imagem"];
}
$contagem = mysql_num_rows($confirmacao);
if ( $conta_imagem == 1 AND $tamanho_imagem >= 5120 ) {
echo "Você já atingiu o limite de armazenamento, faça upgrade em sua conta para continuar enviando arquivos!"; exit;} elseif ( $conta_imagem == 2 AND $tamanho_imagem >= 15360 ) {
echo "Você já atingiu o limite de armazenamento, faça upgrade em sua conta para continuar enviando arquivos!"; exit;
} elseif ( $conta_imagem == 3 AND $tamanho_imagem >= 30720 ) {
echo "Você já atingiu o limite de armazenamento, faça upgrade em sua conta para continuar enviando arquivos!"; exit;
} elseif ( $conta_imagem == 4 AND $tamanho_imagem >= 66560 ) {
echo "Você já atingiu o limite de armazenamento, apague alguma imagens ou vídeo para continuar enviando ou adquira o plano Infinity For Life!"; exit;
}
?>
<HTML>
<HEAD>
<TITLE>Upload</TITLE>
</HEAD>
<BODY>
<form action="envia_arquivos.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="83886080">
<input name="arquivo[]" type="file" size="3" id="arquivo[]" multiple="multiple" />
<BR>
<input type="image" src="images/load.png" name="submit">
<BR><BR>Aguarde o envio...
</form>
</BODY>
</HTML> E esse aqui é o script que faz o envio tanto de vídeos quanto de imagens:
enviar.php
<?php
set_time_limit(0);
include "config.php";
$BE_LOGIN = $_COOKIE["login"];
$BE_PASSWORD = $_COOKIE["senha"];
$db = mysql_connect ($host, $login_db, $senha_db);
$basedados = mysql_select_db($database);
$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE login = '$BE_LOGIN' AND senha = '$BE_PASSWORD'", $db);
while ($row = mysql_fetch_array($confirmacao)) {
$conta_imagem = $row["conta_imagem"];
$tamanho_imagem = $row["tamanho_imagem"];
$list_my_images = $row["list_my_images"];
$USER = $row["login"];
$PaStA = $row["pasta"];
}
$contagem = mysql_num_rows($confirmacao);
if ( $tamanho_livre <= 0 ) {
$tamanho_livre = 0;
}
//define os tipos permitidos
$tipos[0]="image/bmp";
$tipos[1]="image/jpeg";
$tipos[2]="image/png";
$tipos[3]="video/mp4";
// CRIA A VARIÁVEL QUE IRÁ ARMAZENAR OS LINKS DAS IMAGENS ENVIADAS
$imagens_enviadas = "";
$videos_enviados = "";
// FAZ A COMPARAÇÃO SE A PASTA REALMENTE EXISTE
$diretorio = "Upload/$PaStA";
if (!is_dir($diretorio)){ echo "Pasta $diretorio não existe";}
// CASO A PASTA EXISTA IMPRIME A MENSAGEM ABAIXO E CONCLUI O UPLOAD
else {
$arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
for ($k = 0; $k < count($arquivo['name']); $k++)
{
$nomeOriginal = $arquivo['name'][$k];
$nomeData = date("dmYHis").$nomeOriginal;
$nome_MD5 = substr(md5($nomeOriginal.date("dmYHis").rand(9282746,5847361523465768)),-3);
$nome_Extensao = strrchr($arquivo["name"][$k], '.');
$tipo = $arquivo['type'][$k];
$tamanho = $arquivo["size"][$k];
$TAM = $tamanho / 1024;
$convert_MB = $TAM / 1024;
$valor_mb = number_format($convert_MB,2);
// MODIFICA NO MySQL ADICIONANDO O TAMANHO OCUPADO PELA IMAGEM ENVIADA
$db = mysql_connect ($host, $login_db, $senha_db); //conectamos ao mysql
$basedados = mysql_select_db($database); //conectamos ao database
$confirmacao = mysql_query("SELECT * FROM $tabela WHERE login = '$BE_LOGIN' AND senha = '$BE_PASSWORD'", $db); //verificamos se o conteudo dos cookies esta correto
while ($row = mysql_fetch_array($confirmacao)) {
$tamanho_imagem = $row["tamanho_imagem"];
}$contagem = mysql_num_rows($confirmacao); //resultado da pesquisa acima
$tamanho_imagem = $tamanho_imagem + $valor_mb;
$mudar = mysql_query("UPDATE tbl_membros SET tamanho_imagem = '$tamanho_imagem' WHERE login = '$BE_LOGIN' AND senha = '$BE_PASSWORD'");
$nome_final = date('d_m_Y-H_i_s').$nome_MD5.$nome_Extensao;
// SE FOR VÍDEO VERIFICA SE A PASTA VÍDEOS EXISTE
if ( $tipo == $tipos[3] AND $conta_imagem >= 2 ) {
$arquivo_tipo = "video";
$diretorio = "Upload/$PaStA/videos";
// SE A PASTA NÃO EXISTE ENTÃO CRIA ELA
if (!is_dir($diretorio)){ mkdir("$diretorio");}
// E SETA O DESTINO NESTA PASTA CRIADA
$destino = $diretorio."/".date('d_m_Y-H_i_s').$nome_MD5.$nome_Extensao;
} //SE TIVER ENVIADO UM VÍDEO COM CONTA SEM ESTA PERMISSÃO TERMINA O SCRIPT E MANDA AVISO
elseif ( $tipo == $tipos[3] AND $conta_imagem == 1 ) {
echo "Sua conta não tem permissão para enviar este tipo de arquivo. Para enviar vídeos faça um upgrade em sua conta."; exit;
} // CASO NÃO SEJA VÍDEO SETA O DIRETÓRIO COMUM
else { $destino = $diretorio."/".date('d_m_Y-H_i_s').$nome_MD5.$nome_Extensao; }
//PERMITE ARQUIVOS .GIF SE A CONTA POSSIBILITAR
if ( $conta_imagem >= 2 ) {
$tipos[4]="image/gif";
}
// ACRESCENTA OS LINKS DAS IMAGENS ENVIADAS PARA EXIBIÇÃO POSTERIOR
$USUARIO = $USER;
$caminho = "Upload/$PaStA/$nome_final";
if ( $arquivo_tipo != "video" ) {
$imagens_enviadas .= "
<BR>
URL para compartilhar a imagem:<BR><input id='url_share' name='url_share' type='text' value='http://pclife.carlossimas.com/MySocialShare/view_photo.php?camarq=" . $caminho . "&user=" . $USUARIO . "' size='140'>
<BR>
Link direto para a imagem:<BR><input id='url_direto' name='url_direto' type='text' value='http://pclife.carlossimas.com/MySocialShare/" . $caminho . "' size='140'>
<BR><BR>
<a href='javascript:redirecionar()'><font size='5'>Ver a Imagem</font></a>
<BR><BR>";
} else {
$caminho = "Upload/$PaStA/videos/$nome_final";
$videos_enviados .= "
<BR>
URL para compartilhar o video:<BR><input id='url_share' name='url_share' type='text' value='http://pclife.carlossimas.com/MySocialShare/view_photo.php?video=" . $caminho . "&user=" . $USUARIO . "' size='140'>
<BR>
Link direto para o video:<BR><input id='url_direto' name='url_direto' type='text' value='http://pclife.carlossimas.com/MySocialShare/" . $caminho . "' size='140'>
<BR><BR>
<a href='javascript:redirecionar()'><font size='5'>Ver o Video</font></a>
<BR><BR>";
}
if ( $tipo == $tipos[0] OR $tipo == $tipos[1] OR $tipo == $tipos[2] OR $tipo == $tipos[3] OR $tipo == $tipos[4] )
{
if (move_uploaded_file($arquivo['tmp_name'][$k], $destino))
{
} else {
}
} else { echo "Tipo de arquivo não permitido ou nenhum arquivo foi enviado. Veja o Guia de Utilização para saber quais arquivos são permitidos e como converter os seus para tais formatos."; exit;}
}
} // fecha else
?>
<center>
Enviado com sucesso!<BR><BR>
<?php
if ( $arquivo_tipo == "video" ) {
$href = "http://pclife.carlossimas.com/MySocialShare/view_photo.php?video=" . $caminho . "&user=" . $USUARIO;
} else {
$href = "http://pclife.carlossimas.com/MySocialShare/view_photo.php?camarq=" . $caminho . "&user=" . $USUARIO;
}
?>
<HTML>
<HEAD>
<TITLE>New Document</TITLE>
<script language="JavaScript">
function redirecionar(){
var redir = confirm("Clique em OK para ver a imagem enviada. Esta janela sera fechada.")
if(redir == true){
window.opener.location.href='<?php echo "$href";?>'
window.close();
} else{
}
}
function selecionaTexto() {
document.getElementById("url_share").select();
}
function selecionaTexto2() {
document.getElementById("url_direto").select();
}
</script>
<SCRIPT LANGUAGE="JavaScript">
var copytoclip=1
function HighlightAll(theField) {
var tempval=eval("document."+theField)
tempval.focus()
tempval.select()
if (document.all&©toclip==1){
therange=tempval.createTextRange()
therange.execCommand("Copy")
window.status="Conteúdo selecionado e copiado para a área de transferência!"
setTimeout("window.status=''",2400);
}
}
function highlight(field) {
field.focus();
field.select();
}
function goToURL() { window.location = "javascript:HighlightAll('forms[0].select')"; }
</script>
</HEAD>
<BODY>
<?php
$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE login = '$BE_LOGIN' AND senha = '$BE_PASSWORD'", $db); //verificamos se o conteudo dos cookies esta correto
while ($row = mysql_fetch_array($confirmacao)) {
$tamanho_imagem = $row["tamanho_imagem"];
$conta_imagem = $row["conta_imagem"];
}
$contagem = mysql_num_rows($confirmacao); //resultado da pesquisa acima
if ( $conta_imagem == 1 ) {
$tamanho_livre = 5120 - $tamanho_imagem;
$total_tamanho = 5120;
} elseif ( $conta_imagem == 2 ) {
$tamanho_livre = 15360 - $tamanho_imagem;
$total_tamanho = 15360;
} elseif ( $conta_imagem == 3 ) {
$tamanho_livre = 30720 - $tamanho_imagem;
$total_tamanho = 30720;
} elseif ( $conta_imagem == 4 ) {
$tamanho_livre = 66560 - $tamanho_imagem;
$total_tamanho = 66560;
}
?>
Você ainda tem <?php echo "$tamanho_livre";?>Mb de <?php echo "$total_tamanho";?>Mb livres para upload!
<BR><BR>
<center>Suas imagens ou vídeos enviados serão listados a seguir:
<BR>
<?php
if ( $arquivo_tipo != "video" ) {
echo $imagens_enviadas;
} else {
echo $videos_enviados;
}
?>
</BODY>
</HTML> Desde já agradeço a ajuda aê galera!
Ah, lembrando que arquivos de até 10Mb eu envio numa boa. Maior que isso dá aquele erro.
Discussão (5)
Carregando comentários...