Posted 20/10/2004, 22:57
Eu sempre acho por aí uns codes de upload, mas que muitas vezes não funcionam ou estão totalmente desorganizados. Então, fiz esse script em php para uploads de imagens e qualquer outro tipo de arquivo.
Á princípio, este sitema visa jogar um arquivo dentro de uma pasta determinada, checar se o arquivo já existe e gravar em um db o nome, tipo e tamanho. No final, eu coloco algumas alterações possíveis. Vamos lá!!!
Começaremos pelo db, crie uma tabela chamada "imagens" que deve ter os campos id, nome, tipo, tamanho_bytes
CREATE TABLE `imagens` (
`id` int(10) unsigned NOT NULL auto_increment,
`nome` char(250) NOT NULL default '',
`tipo` char(10) NOT NULL default '',
`tamanho_bytes` char(100) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
Aqui, vamos somente determinar as informações do database.
config.php
PHP |
<?
$server = "localhost"; $user = "seu username"; $pass = ""; $database = "nome do seu db";
$conn = mysql_connect($server, $user, $pass) or die("Não foi possível conectar-se ao servidor MySQL"); mysql_select_db($database, $conn) or die("Não foi possível selecionar o banco de dados");
?> |
--------------------------------------------------
Nossa index.php com o formulário de envio do arquivo. Essa página tem um script que bloqueia o botão de "enviar" após ele ser clicado, isso evita acidentes ou qualquer outro tipo de complicações.
index.php
<html>
<head>
<title>|:::| Sistema em PHP desenvolvido por Kauê Porte |:::|</title>
<link rel="stylesheet" href="estilos/estilos.css" type="text/css">
<script>
function desabilita(){
setTimeout('document.up_form.enviar_imagem.disabled = true', 0000);
document.getElementById("enviar_imagem").value = "Enviando Arquivo...";
}
</script>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<div align="center">
<table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" bgcolor="#999999">
<tr>
<td height="10"></td>
</tr>
</table>
<form action="upload.php" method="post" enctype="multipart/form-data" name="up_form" id="up_form">
<table width="400" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="20" align="center" valign="middle" bgcolor="#999999"> <div align="center"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>
Upload de imagens<br>
</strong></font></div></td>
</tr>
<tr>
<td valign="top" bgcolor="#CCCCCC"> <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><br>
</font>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="3">
<tr>
<td><div align="center"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif">Selecione
a imagem e clique em "Enviar Imagem"<br>
# arquivos jpg e gif<br>
# máximo de 2mb<br>
<br>
<input name="arquivo" type="file" class="campos" id="arquivo" size="25">
</font></div></td>
</tr>
</table>
<font size="1" face="Verdana, Arial, Helvetica, sans-serif"><br>
<input name="enviar_imagem" onclick="desabilita();" type="submit" class="botao" id="enviar_imagem" style="border: 1px #000000 solid" value="Enviar Imagem">
<br>
<br>
<br>
</font></div></td>
</tr>
</table>
</form>
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Patrocinado por: <a href="http://www.rudgesbc.com.br"><strong>http://www.rudgesbc.com.br</strong></a><br>
Developed by Kauê Porte<br>
Copyright © 2002-2004 Rudgesbc.com.br - Todos os direitos reservados.</font></div>
</body>
</html>
--------------------------------------------------
Aqui, temos o script que irá pegar o arquivo e enviá-lo para o server.
As explicações dos comandos estão no próprio code.
upload.php
PHP |
<?
include("config.php"); //inclui as informações do database
$nome = $_FILES["arquivo"]["name"]; //pega o nome do arquivo $temp_nome = $_FILES["arquivo"]["tmp_name"]; //pega o "temp" do arquivo $tipo = $_FILES["arquivo"]["type"]; //pega o tipo do arquivo $tamanho = $_FILES["arquivo"]["size"]; //pega o tamanho do arquivo $t_maximo = 2000000; //tamanho máximo do arquivo - em bytes $diretorio = "uploads/"; //pasta onde o arquivo será gravado
if ($nome == "") { //checa se o campo não foi enviado vazio $erro = "Escolha um arquivo á ser enviado"; } elseif (ereg("[][><}{)(:;,!?*%&#@]", $nome)) { //checa caracteres inválidos (aconselho não modificar) $erro = "O nome do arquivo contém caracteres inválidos"; } elseif ($tamanho > $t_maximo) { //checa se o arquivo não ultrapassou o limite $erro = "O tamanho máximo permitido é de 2MB"; } elseif (!eregi("[gif|jpeg|jpg]", $tipo)) { //checa a extensão do arquivo - para liberar mais tipos, apenas acrescente "|extensão do arquivo" ex: [gif|jpeg|jpg|png] $erro = "Tipo de arquivo inválido"; } elseif (!is_file($nome)) { //checa se é mesmo um arquivo $erro = "Selecione um <u>arquivo</u> á ser enviado"; } elseif (is_dir($nome)) { //checa se não é um diretório $erro = "Selecione um <u>arquivo</u> á ser enviado"; } elseif (file_exists("$diretorio"."$nome")) { //checa se o arquivo já existe no diretório $erro = "Já existe um arquivo com este nome, por favor, renomeie-o"; }
if ($erro == "") { //se não ocorreram erros, vamo gravar o arquivo no server e no db move_uploaded_file($temp_nome, $diretorio.$nome); //grava o arquivo na pasta do server que foi especificada $insert = " INSERT INTO imagens (nome,tipo,tamanho_bytes) VALUES ('$nome','$tipo','$tamanho') "; //gravando os dados no db $sql_ins = mysql_query($insert) or die ("Não foi possível inserir os valores no banco de dados"); // '' header("location:suc_up.php"); //se tudo ocorreu bem, vamos á página de sucerro } else { header("location:erro.php?id=$erro"); //se houve algum erro, vai para a página de erro e mostra qual o problema }
?> |
--------------------------------------------------
A página que é mostrada se tudo ocorreu bem.
suc_upload.php
<html>
<head>
<title>|:::| Sistema em PHP desenvolvido por Kauê Porte |:::|</title>
<link rel="stylesheet" href="estilos/estilos.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<div align="center">
<table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" bgcolor="#999999">
<tr>
<td height="10"></td>
</tr>
</table>
<br>
<table width="400" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="20" align="center" valign="middle" bgcolor="#999999"> <div align="center"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>
Upload de imagens<br>
</strong></font></div></td>
</tr>
<tr>
<td valign="top" bgcolor="#CCCCCC"><div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
</font> <font size="1" face="Verdana, Arial, Helvetica, sans-serif"><br>
Upload realizado com sucesso!<br>
<a href="index.php"><br>
Clique aqui para enviar novos arquivos</a><br>
<br>
<br>
<br>
</font></div></td>
</tr>
</table>
<br>
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Patrocinado por:
<a href="http://www.rudgesbc.com.br"><strong>http://www.rudgesbc.com.br</strong></a><br>
Developed by Kauê Porte<br>
Copyright © 2002-2004 Rudgesbc.com.br - Todos os direitos reservados.</font></div>
</body>
</html>
--------------------------------------------------
Página de erro, que mostra se houve algum problema. Se a página for chamada com a string "id" vazia, ele direciona para a index.php
erro.php
PHP |
<?
$erro = $_GET["id"]; if ($erro == ""){ header("location:index.php"); }
?>
<html> <head> <title>|:::| Sistema em PHP desenvolvido por Kauê Porte |:::|</title> <link rel="stylesheet" href="estilos/estilos.css" type="text/css"> </head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0"> <div align="center"> <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" bgcolor="#999999"> <tr> <td height="10"></td> </tr> </table> <br> <table width="400" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="20" align="center" valign="middle" bgcolor="#999999"> <div align="center"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong> Erro<br> </strong></font></div></td> </tr> <tr> <td valign="top" bgcolor="#CCCCCC"><div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> </font> <font size="1" face="Verdana, Arial, Helvetica, sans-serif"><br> <? echo "$erro"; ?> <br> <br> <a href="javascript:history.go(-1)">Voltar</a><br> <br> <br> </font></div></td> </tr> </table> <br> <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Patrocinado por: <a href="http://www.rudgesbc.com.br"><strong>http://www.rudgesbc.com.br</strong></a><br> Developed by Kauê Porte<br> Copyright © 2002-2004 Rudgesbc.com.br - Todos os direitos reservados.</font></div> </body> </html> |
--------------------------------------------------
Bom, o script se resume á isso. Agora vamos á algumas modificações.
Se você quiser que o arquivo faça um overwrite casa ele já exista, é só remover a checagem
PHP |
<?php
elseif (file_exists("$diretorio"."$nome")) { $erro = "Já existe um arquivo com este nome, por favor, renomeie-o"; }
?> |
E caso você não queira que as informações do arquivo sejam gravadas em um db, mude o final do script para isso:
PHP |
<?php
if ($erro == "") { move_uploaded_file($temp_nome, $diretorio.$nome); } else { header("location:erro.php?id=$erro"); }
?> |
Espero que esse script seja útil á alguem como foi pra mim! É isso aí!!!
[]'s á todos!!!
Edição feita por: -|- Cold Heart -|-, 25/10/2004, 15:22.
### Fender Vs. Gibson ###