Terça-feira, 09 de novembro de 2004 às 13h08

Sistema de imagens - Parte 06

Faltam -1 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

Fala galera!

Essa semana adicionaremos ao nosso sistema uma função que terá por finalidade retornar o tamanho e o tipo de imagem que estamos validando. Será usada a função GetImageSize().

Essa é uma alternativa já que, com a função ImagesX() e ImagesY(), obteremos o mesmo resultado, só que a função GetImageSize(), além do tamanho, nos traz o tipo do arquivo.

Resultado final:

Alterando a função VisImagens (arquivo: funcoes.php)

Abaixo é apresentado as linhas que foram acrescentadas ou alteradas na função. Para visualizar a função completa baixe o script que se encontra no fim desse artigo.

<?
function VisImagens($tipo="NULL") {
 //GLOBAL
 global $imagens;
 global $dir;


 ... (continua)

 //VERIFICA O TIPO - SE T = EXIBE TAMANHO DAS IMAGENS
 if($tipo == "T") {
  //VISUALIZA AS IMAGENS VÁLIDAS
  foreach($arq_valido as $chave => $valor) {
  $arquivo = $arq_valido[$chave];


  //CALCULA DO TAMANHO DA IMAGEM
  $tamanho = GetImageSize($dir."\\".$arquivo);

  //VERIFICA O TIPO DO ARQUIVO
  switch($tamanho[2]) {
   case 1: $tipo = "GIF";
           break;
   case 2: $tipo = "JPG";
           break;
   case 3: $tipo = "PNG";
           break;
   case 4: $tipo = "SWF";
           break;
   case 5: $tipo = "PSD";
           break;
   case 6: $tipo = "BMP";
           break;
   case 7: $tipo = "TIFF";
           break;
   case 15: $tipo = "WBMP";
           break;
   default: $tipo = "desconhecido";
            break;
}//FECHA SWITCH


if($arquivo) {
 echo "<tr>";
 echo "<td width="40%" height="35"><font face="Arial" size="2"  color="#006699"><b>Arquivo:</b> ".$arquivo."</font></td>";
 echo "<td width="30%" height="35"><font face="Arial" size="2"  color="#006699"><b>Tamanho:</b> ".$tamanho[0]." x ".$tamanho[1]."</font></td>";
 echo "<td width="20%" height="35"><font face="Arial" size="2"  color="#006699"><b>Tipo:</b> ".$tipo."</font></td>";
 echo "</tr>";

}//FECHA IF(arquivo)
}//FECHA (foreach)
}//FECHA IF (T)

... (continua)
?>

Screenshot:

Linha 107: Chamamos a função GetImageSize() que retornará os dados em forma de array a variável $tamanho.

Linha 110: Verificamos o tipo do arquivo (GIF, JPG etc..). Para verificar a lista completa acesse o site: http://br2.php.net/manual/pt_BR/function.getimagesize.php.

Imagens incluídas no artigo para testes

Baixando o script no link abaixo você econtra na pasta TEMP, 02 imagens para serem usadas em seus testes.

Na hora que o script pedir o diretório, informe esse, ok?

Para conferir toda a série sobre o Sistema de Imagens, clique nos links abaixo:

>> Sistema de Imagens - Parte 01
>> Sistema de Imagens - Parte 02
>> Sistema de Imagens - Parte 03
>> Sistema de Imagens - Parte 04
>> Sistema de Imagens - Parte 05

Para baixar o script, clique no link abaixo.

DOWNLOAD

Clique AQUI e faça o download do script.

Semana que vem tem mais. Espero que vocês tenham gostado :-)

Não deixe de nos enviar críticas ou sugestões para o próximo assunto, afinal a coluna é de vocês.

Boa semana a todos!

13 comentários

 Cássio Lacerda
09/11/2004 13h43

upload de arqui

como eu modelaria um objeto para upload...

 Amauri Júnior
12/11/2004 10h46

PHP

queria saber se você pode me ajudar a instalar o Apache, o PHP e o MySQL, porque não estou conseguindo, esta dando erro.
Qualquer coisa comunique-me se puder!

 Amauri Júnior
12/11/2004 16h09

PHP

já consegui. :)
e também já consegui colocar o modulo Mime Magic...
mas não funciona direito.
valeo!

 Felipe Pereira
27/11/2004 00h48

Excelente

Parabéns Júlio César, esse artigo ficou exelente. Eu gostaria de fazer um pedido, um artigo ensinando a atualizar o php, da versão 4.x.x pra versão 5

 Altair Hruba
29/11/2004 15h58

como fazer um link pop-up nas imagens

estou tentando desenvolver uma galeria apartir do seu sistema de imagens lá tem como fazer pop-up clicando na imagen ele aparece a origianl mas no projeto final não tem e eu gostaria de saber como faço para criar o pop-up das imagens....

 Renato Silva Medina
01/12/2004 19h33

Enviar Imagens

Gostaria de criar um fotolog e futuramente enviar imagens por e-mail. Como faco para enviar uma imagem do meu computador para uma pasta lá no diretório do meu site?

Aguardo retorno!

 Vinicius Nassimbem
04/12/2004 19h43

upload

Porque você (Renato Menina) num clica no link referente às matérias sobre upload, ao invés de torrar os comentários com observações inúteis?

 Emilio Mario Wieczorek
08/03/2005 09h54

PHP

E para quem utiliuza alguma versão do PHP 4, como fazer para que o script funcione, sem a função scandir()

 Jediael patricio
17/03/2005 12h26

Oracle 9i com php consiguo exibir arquivos binários em php?

A Situação é a seguinte. Tenho um projeto que quer cadastrar documentos armazenando o arquivo, do tipo pdf e doc, num campo blob do banco oracle 9i. Mas além disso a proposta tem a intenção de recuperar esses documentos armazenados no banco e que estão em binário e apresentar para o usuario. Esta se usando php e oracle 9i.

Primeiro é feito um upload do arquivo para uma pasta no diretório c:temp
Abaixo mostro o cabeçalho usado....

Código:
&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=us-ascii\n";&gt;
&lt;meta name="GENERATOR" content="Quanta Plus"&gt;
&lt;/head&gt;
&lt;form name='frm_files' method="POST" enctype="multipart/form-data" action="DocumentoInclui_db.php" &gt;
&lt;center&gt;
&lt;table border="0"&gt;
&lt;TABLE BORDER=0 CELLSPACING=2 CELLPADDING=5 BGCOLOR=="#FFF0FF,"&gt;
&lt;TR&gt;&lt;TH COLSPAN=2&gt; Cadastros de Documento &lt;/TH&gt;&lt;/TR&gt;
&lt;/table&gt;

&lt;br&gt;
&lt;?

O código abaixo mostra o momento que o arquivo é passado e armazenado no C:/temp. onde $doc_name é o documento em questão

Código:

//RECEBE OS DADOS DO CAMPO $_FILES
//NOME TEMPORÁRIO NO SERVIDOR
$doc_temp = $HTTP_POST_FILES["Anexar"]["tmp_name"];
//NOME DO ARQUIVO NA MÁQUINA DO USUÁRIO
$doc_name = $HTTP_POST_FILES["Anexar"]["name"];
//TAMANHO DO ARQUIVO
$doc_size = $HTTP_POST_FILES["Anexar"]["size"];
//TIPO MIME DO ARQUIVO
$doc_type = $HTTP_POST_FILES["Anexar"]["type"];

//ENVIA O ARQUIVO PARA A PASTA

chmod('C:\temp\ ', 0777);
@move_uploaded_file ($doc_temp, "C:\\temp\ $doc_name");

Enviada: Qui Mar 17, 2005 12:17 am Assunto: Vamos Começar novamente

--------------------------------------------------------------------------------

A Situação é a seguinte. Tenho um projeto que quer cadastrar documentos armazenando o arquivo, do tipo pdf e doc, num campo blob do banco oracle 9i. Mas além disso a proposta tem a intenção de recuperar esses documentos armazenados no banco e que estão em binário e apresentar para o usuario. Esta se usando php e oracle 9i.

Primeiro é feito um upload do arquivo para uma pasta no diretório c:temp
Abaixo mostro o cabeçalho usado....
Código:
&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=us-ascii\n";&gt;
&lt;meta name="GENERATOR" content="Quanta Plus"&gt;
&lt;/head&gt;
&lt;form name='frm_files' method="POST" enctype="multipart/form-data" action="DocumentoInclui_db.php" &gt;
&lt;center&gt;
&lt;table border="0"&gt;
&lt;TABLE BORDER=0 CELLSPACING=2 CELLPADDING=5 BGCOLOR=="#FFF0FF,"&gt;
&lt;TR&gt;&lt;TH COLSPAN=2&gt; Cadastros de Documento &lt;/TH&gt;&lt;/TR&gt;
&lt;/table&gt;

&lt;br&gt;
&lt;?

O código abaixo mostra o momento que o arquivo é passado e armazenado no C:/temp. onde $doc_name é o documento em questão.
Código:

//RECEBE OS DADOS DO CAMPO $_FILES
//NOME TEMPORÁRIO NO SERVIDOR
$doc_temp = $HTTP_POST_FILES["Anexar"]["tmp_name"];
//NOME DO ARQUIVO NA MÁQUINA DO USUÁRIO
$doc_name = $HTTP_POST_FILES["Anexar"]["name"];
//TAMANHO DO ARQUIVO
$doc_size = $HTTP_POST_FILES["Anexar"]["size"];
//TIPO MIME DO ARQUIVO
$doc_type = $HTTP_POST_FILES["Anexar"]["type"];

//ENVIA O ARQUIVO PARA A PASTA

chmod('C:\temp\ ', 0777);
@move_uploaded_file ($doc_temp, "C:\\temp\ $doc_name");



Com o arquivo armazenado no diretório o procedimento criado no sql é usado para armazenar na tabela

Código:
$clob = OCINewDescriptor($db, OCI_D_LOB);
$stmt = OCIParse($db, "begin insert_doc_blob($cod_doc_arm,$cod_doc_arm,'TEMP',' $doc_name');end;");
OCIExecute($stmt, OCI_DEFAULT);

abaixo o procedimento criado no bd oracle9i e que armazena o arquivo na tabela

create or replace procedure insert_arq_lob ( Diretorio varchar2, arquivo varchar2) is
V_ARQUIVO bfile;
V_CAMPO_LOB blob;
V_TAM_ARQUIVO integer;
begin
V_ARQUIVO:=bfilename(Diretorio,Arquivo);
dbms_lob.fileopen ( V_ARQUIVO, dbms_lob.file_readonly );
V_TAM_ARQUIVO:=dbms_lob.getlength(V_ARQUIVO);
insert into docs values (arquivo,empty_blob)
returning doc into V_CAMPO_LOB;
dbms_lob.loadfromfile(V_CAMPO_LOB,V_ARQUIVO,V_TAM_ARQUIVO);
dbms_lob.fileclose(V_ARQUIVO);

commit;
end;

Agora o problema está na hora de retornar o arquivo do banco, como sei o sql não retorna o arquivo binário e não sei como tratar esso no php......... então aí esta o problema.

 Eduardo Dias
19/04/2005 14h40

não funcionou

Funcionou para alguém que possa me mandar o script melhorado ?
como desde o começo meu servidor não funcionou eu sempre mando para o provedor para testar e sempre tenho conseguido fazer funcionar mas o sistema de imagens não funcionou ... obrigado
Rick - ser alguém tiver um outro sistema por favor me envie

 Alexandre Silva
08/11/2005 18h27

Muito legal isso!

&lt;strong&gt;Legal pra caramba!&lt;/strong&gt;&lt;br&gt;
&lt;i&gt;Parabéns!&lt;/i&gt;

 Daniel Alcanja
11/11/2005 09h05

Função scandir()

segue aew a função pra kem usa versoes anteriores ao PHP5...

encontrei essa dica no site www.php.net

function scandir($dir = './', $sort = 0)
{

$dir_open = @ opendir($dir);

if (! $dir_open)
return false;


while (($dir_content = readdir($dir_open)) !== false)
$files[] = $dir_content;

if ($sort == 1)
rsort($files, SORT_STRING);
else
sort($files, SORT_STRING);

return $files;
}

 Daniel Alcanja
11/11/2005 09h07

Função scandir()

o imasters blokeia o conteudo postado nos ocmentários ehehehe... a função pode ser vista em http://br2.php.net/manual/pt_BR/function.scandir.php nos comentários no fim da página.

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Júlio César Martini atualmente presta serviços de WebMaster/Programador para o UOL (http://www.uol.com.br), Graduado em Tecnólogo em Informática pela UNIFIAN - Faculdades Anhanguera e Pós-Graduado em Desenvolvimento de Software para Web pela UFSCAR. Foi o primeiro profissional a chegar à marca de 100 artigos publicados no iMasters e trabalha com PHP desde 2000. Site: http://www.juliocesarmartini.com
3G

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.