Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos do forum. Queria ajuda dos amigos para tentar solucionar um problema com uma função de upload de imagens.
Essa função genérica foi retirada de uma classe e adaptada para ser usada em uma função. Essa função não foi tinha tratamento de erros, e não retornava nenhum resultado para que o utilizador da mesma, soubesse se houve algum erro no processo. Então, eu dei uma otimizada para que ficasse mais simples seu uso em meus projetos.
Resumindo: a função foi testada e funciona muito bem com upload de apenas uma imagem por vez, já com upload multiplo não funciona. Vou postar abaixo a função para possam analizar e qualquer sujestão é bem vinda, até mesmo para otimiza-la mais ainda.
function uploadImage($tmp, $nome, $width, $pasta, $file, $path){ //acredito que o erro está no parâmetro $file. Na chamada da função eu envio $_FILES['imagem'] //aumenta a capacidade máxima de tamanho dos arquivos para uload de 2MB, padrão do apache, para 10MB ini_set('post_max_size', '10M'); ini_set('upload_max_filesize', '10M'); //define os tipo de arquivos permitidos $filtro = array("image/jpeg", "image/jpg", "image/pjpeg", "image/gif", "image/png"); //pega url da página atual $urlBack = explode('/',$_SERVER['REQUEST_URI']); $urlBack = $urlBack[2].'/'.$urlBack[3]; $linkBack = 'Clique <a href="'.$urlBack.'" title="Voltar">aqui</a> para voltar.'; //pega extensão do arquivo $ext = substr($nome,-3); $tipo = (string)$file['type']; if(!in_array(trim($tipo), $filtro)){ $err = true; }else{ $dimensoes = getimagesize($file['tmp_name']); $imgW = $dimensoes[0]; $imgH = $dimensoes[1]; if($imgW < $width){ $err = true; } //gera nome único para a imagem switch($ext){ case 'jpg': $nome = md5(uniqid($nome).time()).'.jpg'; break; case 'png': $nome = md5(uniqid($nome).time()).'.png'; break; case 'gif': $nome = md5(uniqid($nome).time()).'.gif'; break; } //verifica tamanho do arquivo em bytes $tamBytes = filesize($tmp); $tamMaximo = (1024 * 1024) * 10; if($tamBytes > $tamMaximo){ $err = true; }else{ switch($ext){ //cria uma nova imagem de acordo com e extensão case 'jpg': $img = @imagecreatefromjpeg($tmp) or die($err = true); break; case 'png': $img = @imagecreatefrompng($tmp) or die($err = true); break; case 'gif': $img = @imagecreatefromgif($tmp) or die($err = true); break; } //obtem largura e altura da imagem criada $x = @imagesx($img) or die($err = true); $y = @imagesy($img) or die($err = true); //define novas dimensão para a imagem $height = ($width * $y) / $x; //cria nova imagem com as novas dimensões $nova = @imagecreatetruecolor($width, $height) or die($err = true); @imagealphablending($nova,false) or die($err = true); @imagesavealpha($nova,true) or die($err = true); @imagecopyresampled($nova, $img, 0, 0, 0, 0, $width, $height, $x, $y) or die($err = true); switch($ext){ //envia as imagens criadas para o novo diretório case 'jpg': @imagejpeg($nova, $pasta.$nome, 100) or die($err = true); break; case 'png': @imagepng($nova, $pasta.$nome) or die($err = true); break; case 'gif': @imagegif($nova, $pasta.$nome) or die($err = true); break; } //libera a memória associada com a imagem imagedestroy($img) or die($err = true); imagedestroy($nova) or die ($err = true); } } //se não retornar nenhum erro, e a variável $path (que retorna o diretório e nome do arquivo) do tipo bolleana for definida como true, então, afunção //retorna o diretório e nome do arquivo if(!$err && $path == true){ return $pasta.$nome; }elseif($err && $path == false){ //se não ocorrer nenhum erro, retorna true return true; }elseif($err){ //caso ocorra algum erro, retorna false return false; }}
Abaixo, um script de testes que chama a função acima.
<?phpif(isset($_FILES['imgs'])){ $img = $_FILES['imgs']; $pastaTeste = 'uploads/testes/'; if(!file_exists($pastaTeste)){ mkdir($pastaTeste); } for($i=0;$i<count($img['tmp_name']);$i++){ $enviada = uploadImage($img['tmp_name'][$i], $img['name'][$i], 800, $pastaTeste, $_FILES['imgs'], true); if(!$enviada){ $return['error'][$i] = 'Não foi possível enviar o arquivo '.$img['name'][$i]; } } if(count($return['error']) <= 0){ echo 'Todas as imagens foram enviadas com exito!'; }else{ for($i=0;$i<count($return['error']);$i++){ echo $return['error'][$i]; } }}?>
Bem, é isso. Esperem que me ajudem nessa tarefa e desde já agradeço a todos.
imasters... fórum tá paradão em!
>
Ola você ta querendo fazer upload com foto unica ou pra galeria?
<? require "verifica.php";?>
<?
$variables=(strtolower($_SERVER['REQUEST_METHOD'])== 'GET') ? $_GET : $_POST;
foreach ($variables as $k=> $v)
$k=$v;
$palavra = "Teste";
$palavra2 = "Teste do site";
$tabela = "tb_Teste";
$file = "Teste";
// iniçio da acao INSERI NO BD
if($acao== "insertbd"){
$data1 = "$ano1-$mes1-$dia1";
$data2 = "$ano2-$mes2-$dia2";
$sql = "INSERT INTO $tabela VALUES ('', '$local', '$nome', '$descricao', '$data1', '$data2', '', '$logo', 'S')";
$sql2 = mysql_query($sql);
$id_recuperado = mysql_insert_id();
$dir = "../images/Teste/$id_recuperado";
//echo "$dir";
// inicia criação de pasta
$pasta = @mkdir("$dir", 0777);
@chmod("$dir", 0777);
// fim da criação da pasta
$uploaddir = "$dir/";
if(is_dir("$dir")){
if($foto != "none") {
if (copy($_FILES['foto']['tmp_name'], $uploaddir . $_FILES['foto']['name'])) {
$foto1 = $_FILES['foto']['name'];
//echo "<strong>$foto1</strong> enviada com sucesso!<BR>";
$var1 = mysql_query("update $tabela set foto='$foto1' where id='$id_recuperado'");
} else {
echo "<script>alert('A foto não pode ser enviada!')</script>";
}
}
} else {
echo "<script>alert('O Diretório não existe!')</script>";
}
$mgs = "<b>$palavra</b> Inserido com Sucesso!";
echo "<table border='0' align='center' cellpadding='0' cellspacing='0' style='border: 1px solid $corcelula1;'>
<tr>
<td width='400' bgcolor='$corcelula2' align='center' class='titulos'> $mgs</td>
</tr>
</table>
<br>
";
//echo "<meta http-equiv='refresh' content='1;URL=?pg=$file'>";
}
// fim da acao INSERI NO BD
// iniçio da acao UPDATE NO BD
if($acao== "updatebd"){
$data1 = "$ano1-$mes1-$dia1";
$data2 = "$ano2-$mes2-$dia2";
if($nova_foto == "S"){
$dir = "../images/Teste/$id";
$uploaddir = "$dir/";
if(is_dir("$dir")){
if($foto != "none") {
if (copy($_FILES['foto']['tmp_name'], $uploaddir . $_FILES['foto']['name'])) {
$foto1 = $_FILES['foto']['name'];
//echo "<strong>$foto1</strong> enviada com sucesso!<BR>";
} else {
echo "<script>alert('A foto não pode ser enviada!')</script>";
}
}
} else {
echo "<script>alert('O Diretório não existe!')</script>";
}
@unlink("$dir/$foto_antiga");
} else {
$foto1 = "$foto_antiga";
}
$sql = "UPDATE $tabela SET local='$local', nome='$nome', descricao='$descricao', data1='$data1', data2='$data2', foto='$foto1', logo='$logo' WHERE id='$id'";
$sql2 = mysql_query($sql);
$mgs = "<b>$palavra</b> Alterada com Sucesso!";
echo "<table border='0' align='center' cellpadding='0' cellspacing='0' style='border: 1px solid $corcelula1;'>
<tr>
<td width='400' bgcolor='$corcelula2' align='center' class='titulos'> $mgs</td>
</tr>
</table>
<br>
";
//echo "<meta http-equiv='refresh' content='0;URL=?pg=$file'>";
}
// fim da acao UPDATE NO BD
// iniçio da acao STATUS NO BD
if($acao == "status"){
$sql = "UPDATE $tabela SET status='$status' WHERE id='$id'";
$sql2 = mysql_query($sql);
$mgs = "Status Alterado com Sucesso!";
echo "<table border='0' align='center' cellpadding='0' cellspacing='0' style='border: 1px solid $corcelula1;'>
<tr>
<td width='400' bgcolor='$corcelula2' align='center' class='titulos'> $mgs</td>
</tr>
</table>
<br>
";
//echo "<meta http-equiv='refresh' content='0;URL=?pg=$file'>";
}
// fim da acao STATUS NO BD
// iniçio da acao EXCLUIR SELECIONADOS
if($acao == "excluir_selecionados"){
$listas = implode("|", $listas);
// echo "$planos<hr>";
$lista = explode("|", $listas);
$total = count($lista);
// echo $total;
for($i=0; $i<$total; $i++){
$sql = "delete from $tabela WHERE id='$lista[$i]'";
$sql2 = mysql_query($sql);
//echo "$sql<br>";
$dir = "../images/Teste/$lista[$i]/";
$dir1 = opendir("$dir");
while ($res =readdir($dir1)){
if ($res!='' && $res!='.' && $res!='..'){
$url = "$dir/$res";
@unlink("$url");
}
}
@rmdir ("$dir");
}
$mgs = "<b>$palavra </b>Excluído com Sucesso!";
echo "<table border='0' align='center' cellpadding='0' cellspacing='0' style='border: 1px solid $corcelula1;'>
<tr>
<td width='400' bgcolor='$corcelula2' align='center' class='titulos'> $mgs</td>
</tr>
</table>
<br>
";
//echo "<meta http-equiv='refresh' content='2;URL=?pg=$file'>";
}
// fim da acao EXCLUIR SELECIONADOS
// iniçio da acao FORM DE CADASTRO E ALTERAR
//if($acao== "FORM"){
$form1 = "FORMULARIO";
$sql=mysql_query("SELECT * FROM $tabela WHERE id='$id'");
$dados=mysql_fetch_array($sql);
$data1 = explode("-", $dados[data1]);
$data2 = explode("-", $dados[data2]);
?>
<script>
function HabilitarFoto() {
nForm = document.forms['<?=$form1?>'];
if(nForm.elements['nova_foto'].checked = true) {
nForm.elements['foto'].disabled = false;
nForm.elements['foto'].className= "input";
}
}
function DesabilitarFoto() {
nForm.elements['foto'].disabled = true;
nForm.elements['foto'].className = "inputon";
}
</script>
<form action="?pg=<?=$file?>" method="post" enctype="multipart/form-data" name="<?=$form1?>">
<fieldset style="width:100%;">
<input name="acao" type="hidden" value="<?=(empty($id))?"insertbd":"updatebd";?>">
<input name="id" type="hidden" value="<?=$id?>">
<input name="foto_antiga" type="hidden" value="<?=$dados[foto]?>">
<table width="99%" align="center" cellpadding="0" cellspacing="0">
<tr><td><font class="titulos"><?=(empty($id))?"Cadastrar":"Alterar";?> <?="$palavra"; ?>
</font> (<a href="<?="?pg=$file";?>">Cadastrar Novo</a>)</td>
</tr>
</table>
<table width="99%" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td valign="middle">Local: <br />
<input name='local' type='text' value="<? echo $dados[local]?>" size="52" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" /></td>
</tr>
<tr>
<td valign="middle">Nome da Teste.: <br />
<input name='nome' type='text' value="<? echo $dados[nome]?>" size="52" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" /> </td>
</tr>
<tr valign=middle>
<td>Perfil, etc:<br />
<textarea name="descricao" style="width:500px; height:55px;" cols="55" rows="3" class="input" onblur="this.className='input';" onfocus="this.className='inputon';"><? echo $dados[descricao]?></textarea>
</td>
</tr>
<tr valign=middle>
<td colspan="2"><table width="640" border="0" align="center" cellpadding="10" cellspacing="0">
<tr>
<td bgcolor="#F3F3F3" class="noticias_outras"> <p align="center"> </p></td>
</tr>
</table>
<fieldset>
<legend>Foto/Capa: </legend>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="76">
<?
if(empty($id)){
echo "<img width='60' name='foto1' src='thumbs.php?w=60&imagem=../images/layout/sem_foto.jpg' border='0'>";
} else {
if(!empty($dados[foto])){
echo "<img width='60' name='foto1' src='thumbs.php?w=60&imagem=../images/Teste/$id/$dados[foto]' border='0'>";
} else {
echo "<img width='60' name='foto1' src='thumbs.php?w=60&imagem=../images/layout/sem_foto.jpg' border='0'>";
}
}
?></td>
<td valign="middle"><table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="middle"><? if(empty($id)){?>
<input class="inputon" onchange="document.images.foto1.src=this.value" name='foto' type='file' size="16" onclick="javascript:alert('Todas as fotos devem ter o formato .jpg');" />
<? } else {?>
Trocar
Foto?:
<input name="nova_foto" type="radio" value="N" checked="checked" onclick="javascript:DesabilitarFoto()" />
Não
<input name="nova_foto" type="radio" value="S" onclick="javascript: HabilitarFoto();" >
Sim<br />
<input class="inputon" onchange="document.images.foto1.src=this.value" name='foto' type='file' size="16" disabled="disabled" onclick="javascript:alert('Todas as fotos devem ter o formato .jpg');" />
<? }?></td>
</tr>
</table></td>
</tr>
</table>
</fieldset> </td>
</tr>
<tr>
<td>Data 1: <br />
<input name="dia1" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<?=(!empty($dados[data1]))?$data1[2]:date("d");?>" size="2" maxlength="2" />
<input name="mes1" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<?=(!empty($dados[data1]))?$data1[1]:date("m");?>" size="2" maxlength="2" />
<input name="ano1" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<?=(!empty($dados[data1]))?$data1[0]:date("Y");?>" size="5" maxlength="4" /></td>
</tr>
<tr>
<td>Data 2: <br />
<input name="dia2" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<? $d2 = date("d")+1; echo (!empty($dados[data2]))?$data2[2]:$d2;?>" size="2" maxlength="2" />
<input name="mes2" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<?=(!empty($dados[data2]))?$data2[1]:date("m");?>" size="2" maxlength="2" />
<input name="ano2" type="text" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="<?=(!empty($dados[data2]))?$data2[0]:date("Y");?>" size="5" maxlength="4" /></td>
</tr>
<tr>
<td valign="middle"><fieldset>
<legend>Colocar marca dagua nas fotos: </legend>
<input name='logo' type='radio' value='S' <?=($dados[logo]=="S")?"checked":"";?>>
Sim <input name='logo' type='radio' value='N'
<?
if(empty($id)){
echo "checked";
} else {
if($dados[logo]=="N"){
echo "checked";
}
}
?>>
Não
</fieldset> </td>
</tr>
<tr>
<td valign="middle"><input style="width:110px;" type="submit" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" name='btgravar' value="<?=(empty($id))?"Cadastrar":"Alterar";?>" />
Apos realizar cadastro, clique no botao enviar fotos na listagem para poder enviar arquivo com fotos</td>
</tr>
</table>
</fieldset>
</form>
<?
//} // fim da acao FORM DE CADASTRO E ALTERAR
?>
<?
// inicio da acao LISTAR
//if($acao == "listar"){
$form2 = "FORMLISTA";
$busca = "SELECT * FROM $tabela order by data1 Desc";
//echo $busca;
$total_reg = "50";
if(!$page){
$page = "1";
}
$inicio = $page-1;
$inicio = $inicio*$total_reg;
$limite = mysql_query("$busca LIMIT $inicio,$total_reg");
$todos = mysql_query("$busca");
$tr = mysql_num_rows($todos);
//$tr = count($op);
//echo $tr;
$tp = ceil($tr / $total_reg);
?>
<form action="?pg=<?=$file?>" method="POST" name="<?=$form2?>">
<fieldset style="width:100%;">
<input name="acao" type="hidden" value="excluir_selecionados">
<table width="99%" align="center" cellpadding="0" cellspacing="0">
<tr><td><font class="titulos">Lista de <b><?=$palavra?></b> </font></td>
<td align="right"><strong><? echo "<b><font color=$coronmouse>$tr</font></b>";?></strong> registros! </td>
</tr>
</table>
<table width="99%" border="0" align="center" cellpadding="2" cellspacing="1">
<tr bgcolor="#CCCCCC">
<td width="10%" align="center" bgcolor="#C0C0C0"><b>ID</b></td>
<td width="37%" align="center"><b>Teste</b></td>
<td width="21%" align="center"><b>LOCAL</b></td>
<td width="14%" align="center"><b>DATA</b></td>
<td align="center" bgcolor="#C0C0C0"><b>AÇÕES</b></td>
</tr>
<?
$i=0;
while ($dados=mysql_fetch_array($limite)) {
if (($i%2)==0) { $bgcolor="#FFFFFF"; } else { $bgcolor="#e5e5e5"; }
?>
<tr>
<td align="center" bgcolor="<? echo $bgcolor; ?>"><table width="90%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="20"><input id='check_sel' name='listas[]' type='checkbox' value='<?="$dados[id]";?>' /></td>
<td><b><?=$dados[id];?></b></td>
</tr>
</table></td>
<td bgcolor="<? echo $bgcolor?>"><b><?=$dados[nome]; ?> </b></td>
<td bgcolor="<? echo $bgcolor?>"><b>
<?
echo $dados[local]; //$dados[id_cat];
?> </b></td>
<td align="center" bgcolor="<? echo $bgcolor?>"><b><? $data = explode("-", $dados[data1]); echo "$data[2]/$data[1]/$data[0]";?>
<br />
<? $data2 = explode("-", $dados[data2]); echo "$data2[2]/$data2[1]/$data2[0]";?>
</b></td>
<td align="center" bgcolor="<? echo $bgcolor; ?>">
<a href="?pg=<?=$file?>_fotos&id=<?=$dados[id];?>"><img src="../images/admin/botao_sendfotos.gif" alt="Enviar Fotos" border="0" /></a>
<a href="?pg=<?=$file?>_fotos&acao=verfotos&caminho=../images/Teste/<?=$dados[id];?>"><img src="../images/admin/botao_verfotos.gif" alt="Ver Fotos" border="0" /></a><a href="?pg=<?=$file?>&acao=status&id=<?=$dados[id];?>&status=<?=($dados[status]=="S")?"N":"S";?>"> <img src="<?=$usite?>images/admin/status_<?=($dados[status]=="S")?"on":"off";?>.png" alt='Alterar Status para <?=($dados[status]=="S")?"OFF":"ON";?>' border='0' /></a> <a href="?pg=<?=$file?>&acao=FORM&id=<?=$dados[id]?>"><img src="<?=$usite?>images/admin/botao_edit.png" alt="Alterar" border="0" /></a>
<!--<a href="javascript:confirmaExclusao('?pg=<?=$file?>&acao=excluirbd&id=<?=$dados[id];?>')"><img src="<?=$usite?>images/admin/botao_drop.png" alt="Excluir" hspace="3" border="0" /></a>--></td>
</tr>
<? $i++; }?>
<tr>
<td colspan="5"><table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="100" align="right" valign="top"><?
if($page > 1){
$anterior = $page -1;
$url = "?pg=$pg&acao=$acao&page=$anterior";
echo "<a href='$url'>« Anterior</a> | ";
} else {
echo "<font color='$corcelula2'>« Anterior</font> | ";
}
?> </td>
<td align="center"><?
for($i=1; $i<$page; $i++)
if($i>=$page-5)
echo "<a href='?pg=$pg&acao=$acao&page=$i'>$i</a> | ";
echo "<font color='$coronmouse'><b>$page</b></font> ";
for($i=$page+1; $i<=$tp; $i++)
if($i<=$page+5)
echo " | <a href='?pg=$pg&acao=$acao&page=$i'>$i</a>";
?></td>
<td width="100" align="left" valign="top"><?
if($tp > $page){
$proxima = $page +1;
$url = "?pg=$pg&acao=$acao&page=$proxima";
echo " | <a href='$url'>Próxima »</a>";
} else {
echo " | <font color='$corcelula2'>Próxima »</font>";
}
?></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="5"><input style="width:110px;" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" type="button" value="Selecionar Todos" onclick='SelectAll();' id="sel_todos">
<input style="width:110px;" name="Button" type="button" class="input" onblur="this.className='input';" onfocus="this.className='inputon';" value="Excluir Selecionados" onClick="checkdeletetion();"></td>
</tr>
</table>
</fieldset>
</form>
<?
//}
?>
<br />
Valew amigo. Depois de debugar bastante, consegui resolver o problema do upload múltiplo com a função citada acima por mim. O tópico pode ser marcado como resolvido.
De nada da um ponto de reputação se puder na seta /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_images/imasters/rep_up.png&key=69f1cee84b0cec2770cf4978eb26283900cc6cd53272a52e2e7da158a809e582" alt="rep_up.png" /> ok desde ja agradeço.
Feito meu camarada Anderson Camargo :joia:
Ola você ta querendo fazer upload com foto unica ou pra galeria?
<? require "verifica.php";?>
<?
// iniçio da acao INSERI NO BD
// inicia criação de pasta
// fim da criação da pasta
$uploaddir = "$dir/";
if(is_dir("$dir")){
} else {
// fim da acao INSERI NO BD
// iniçio da acao STATUS NO BD
// fim da acao STATUS NO BD
// iniçio da acao EXCLUIR SELECIONADOS
// fim da acao EXCLUIR SELECIONADOS
// iniçio da acao FORM DE CADASTRO E ALTERAR
<?
if(empty($id)){
echo "checked";
} else {
<?
//} // fim da acao FORM DE CADASTRO E ALTERAR
?>
<?
// inicio da acao LISTAR
<?
$i=0;
while ($dados=mysql_fetch_array($limite)) {
if (($i%2)==0) { $bgcolor="#FFFFFF"; } else { $bgcolor="#e5e5e5"; }
} else {
} else {
<?
//}