Fazendo UPLOAD de arquivos usando PHP – PARTE 1
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:
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:
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.
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.
Novo Comentário: