Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andre_neves_123

armazenar arquivo no banco de dados

Recommended Posts

bom sou um pouco novato em php e mysql, queria saber como que faz para armazenar arquivo binário no mysql e o query para baixar os dados binários, e queria saber se isto pode causar instabilidade no host, no caso este arquivo que preciso armazenar não passa de 100 kb, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até 100MB é tranquilo ( apesar de o mysql suportar até 4GB ).

Mateus, eu já não acho 'tão tranquilo assim', veja bem, se você guarda um arquivo de 100 mb em uma linha da tabela, imagina quando for fazer um select ?

o tempo que vai demorar a processar o blob inteiro ? é melhor você guardar o PATH do arquivo no banco de dados, e o arquivo no servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom como faço para uma tabela poder gravar no maximo uma linha? no caso apenas 1 arquivo

 

é melhor você guardar o PATH do arquivo no banco de dados, e o arquivo no servidor.

 

bom na verdade ja tinha visto em outros lugares falando que isto e melhor mesmo, mais é que esse arquivo vou colocar para ser acessado por um programa, que acho que o único jeito mesmo e armazenando no banco de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

A Linguagem de programação usada pelo seu programa, não dá suporte a acesso em FTP ?

bom na verdade não expliquei direito, é um plugin para um jogo que preciso verificar se ele foi atualizado, no caso eu estaria armazenando os dados e a versão, se foi, eu pego os dados e coloco em um arquivo, por isso tem que ser sql

Compartilhar este post


Link para o post
Compartilhar em outros sites
é melhor você guardar o PATH do arquivo no banco de dados, e o arquivo no servidor.

Sem dúvida nenhuma, Andrey. A prioridade sempre será o caminho para o arquivo, porém eu direcionei a resposta conforme a pergunta do André.

Há casos em que há necessidade de alocar arquivos no banco de dados, principalmente pela segurança (caso sejam arquivos confidenciais).

 

Mas quando me referi à ser tranquilo, estava me referindo ao recrutamento de memória para realizar a leitura destes dados. Peguei um link de referência que explica o que estou dizendo: http://mysqlinsights.blogspot.com/2009/01/mysql-blobs-and-memory-allocation.html

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode ter segurança guardando os arquivos no servidor também, basta você restringir o acesso por .htaccess ou usar uma pasta fora do webroot ou outra forma similar nas pastas onde estão os arquivos e acessar eles somente via php local do servidor, assim você valida o acesso do usuário com o php

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais entao como faço isto? armazenar apenas um arquivo na tabela, e o query para baixar o binario do arquivo?

 

@edit

 

tentei fazer isto mais como não sei mecher muito com isso deu erro, alguem olha se esta certo:

 

CREATE TABLE  `arquivos` (
`dados` MEDIUMBLOB NOT NULL ,
`versao` FLOAT NOT NULL ,
UNIQUE (
`versao`
)
) ENGINE = INNODB;

 

<?php
$conexao = mysql_connect("localhost","root","");
mysql_select_db("arquivo");

$arquivo="teste.doc";
$binario = file_get_contents($arquivo);
$binario = addslashes(fread(fopen($arquivo, "r"), filesize($arquivo))); 

$sql = "INSERT INTO `arquivo`.`arquivos` ('$binario', '1.0')";

mysql_query("$sql") or die (mysql_error());
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

usei este script acima e deu isso:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ÐÏࡱá\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>\0\0þÿ \0\0\0\0\0\0\0\0\0\0\0\0\0\0' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, faça assim:

<?php
$conexao = mysql_connect( "localhost" , "root" , "" );
mysql_select_db( "arquivo" );

$arquivo = 'teste.doc';
$versao = '1.0';
if( file_exists( $arquivo ) && is_readable( $arquivo ) ){
   $binario = addslashes( base64_encode( file_get_contents( $arquivo ) ) ); 
   $sql = sprintf( "INSERT INTO `arquivo`.`arquivos` ( '%s' , '%s' )", $binario, $versao );
   mysql_query( $sql ) or die ( mysql_error() );
} 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAAqwAAAAAAAAAAEAA' at line 1

 

isso ta parecendo problema com o mysql, alguem sabe o que pode ser

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é não, testei a codificação de um arquivo PNG com base64, inseriu direitinho, tenta trocar

$sql = sprintf( "INSERT INTO `arquivo`.`arquivos` ( '%s' , '%s' )", $binario, $versao );

 

Por:

$sql = sprintf( 'INSERT INTO `arquivo`.`arquivos` ( "%s" , "%s" )', $binario, $versao );

Compartilhar este post


Link para o post
Compartilhar em outros sites

aff entao não sei o que pode ser, so pra confirmar:

 

CREATE TABLE  `arquivos` (
`dados` MEDIUMBLOB NOT NULL ,
`versao` FLOAT NOT NULL ,
UNIQUE (
`versao`
)
)

 

<?php
$conexao = mysql_connect( "localhost" , "root" , "" );
mysql_select_db( "arquivo" );

$arquivo = 'teste.png';
$versao = '1.0';

if( file_exists( $arquivo ) && is_readable( $arquivo ) )
{
   $binario = addslashes( base64_encode( file_get_contents( $arquivo ) ) ); 
   $sql = sprintf( 'INSERT INTO `arquivo`.`arquivos` ( "%s" , "%s" )', $binario, $versao );
   mysql_query( $sql ) or die ( mysql_error() );
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.