0

Fazendo UPLOAD de arquivos usando PHP – PARTE 1

criado por João Seabra em 24/09/2006 9:37am
O UPLOAD:

Não vou me deter muito nesta parte, pois são utilizadas funções nativas do PHP. Para os iniciantes, estou mandando para a seção de scripts Upilôader Super Mega Pró Plus com Sistema Bleach Tabajara, desenvolvido pelo meu amigo Zé de Paula, com algumas alterações realizadas por mim.

CAMPO BLOB:

BLOB (Binary Large Object – Grande Objeto Binário), nada mais é que um campo TEXT, case-sensitive, utilizado para armazenar arquivos binários.

No MySQL são divididos em 4 tipos:

TINYBLOB – armazena até 256 bytes, ou seja, 255 caracteres mais 01 de controle;
BLOB – armazena até 64 kB, ou seja, 16.535 caracteres mais 02 de controle;
MEDIUMBLOB – armazena até 16MB, ou seja, 16.777.216 caracteres mais 03 de controle;
LONGBLOB – armazena até 4GB, ou seja, 4.294.967.295 caracteres mais 04 de controle;

EXECUTANDO O INSERT EM UM CAMPO BLOB:

Agora que já conhecemos os campos BLOB, vamos ver como utilizamos o comando INSERT com ele:

INSERT INTO tabela (id, file) VALUES (1, LOAD_FILE("/tmp/file.gif"));

O que muda de um INSERT normal é o comando LOAD_FILE, o qual deverá ser dado no arquivo que deseja ser inserido no banco. O comando fará a codificação do arquivo file.file num formato inteligível, por exemplo, base64, para o MySQL para a tabela. Neste caso, o caminho do arquivo deve ser dado por completo, por exemplo: /tmp/file.gif ou c:/tmp/file.gif.
Detalhes importantes: Você deverá ter permissão de escrita e leitura no arquivo pra poder realizar a inserção. O tamanho do arquivo também não poderá exceder a variável de ambiente max_allow_packet, caso contrário será inserido NULL.

EXECUTANDO O SELECT EM UM CAMPO BLOB:

Já conhecemos como fazemos a inserção no MySQL. Vamos verificar agora como usamos o comando SELECT:

SELECT file INTO OUTFILE “/dir/file.file” FROM tabela WHERE id = 1;

O que muda de um SELECT normal é o comando INTO OUTFILE que fará a codificação do arquivo binário no diretório “/dir”. Importante ressaltar que você também deverá ter permissão de leitura e escrita nesse diretório.

Outra ressalva seria que não adianta tentar fazer essa SELECT, tentando visualizar o arquivo dentro do DB, pois o mesmo não conseguirá retornar o arquivo propriamente dito e sim criará um arquivo dentro do diretório especificado.

DESVANTAGENS:

LENTIDÃO – Haverá uma demora desnecessária para a página ser carregada, pois a imagem só será enviada para o cliente após criada no diretório.

BURACOS – O campo BLOB assim com o campo TEXT não realiza a eliminação dos espaços vazios contíguos no final do campo. Por exemplo: Se um arquivo estiver sendo carregado em um campo LONGBLOB e tiver 16.535 caracteres (o tamanho de um campo BLOB) irá “sobrar” 4.294.950.760 caracteres, ou seja, praticamente o campo todo ficará vazio. Ou seja, o arquivo ocupará mais espaço no HD que o necessário.

VANTAGENS:

BUSCA DE CONTEÚDO – Como o arquivo estará em formato binário, ficará muito mais simples realizar a busca de um conteúdo determinado.

GERENCIAMENTO – Você não precisa se preocupar com permissão de diretórios, nem com segurança. Isso é provido pelo banco de dados.

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)