Salvar BLOB de MYSQL 1 - pelo navegador de quem solicitou 2 - Salvar no servidor msmo (ja fiz de tudo.. revirei material e nada..)

05/12/2012

0

PHP

Pessoal .. la vamos denovo.. to com uma duvida. peco mais uma vez ajuda.. olha so.. tenho a situacao ..

tabela arquivos

q dentro tem id (primary key) , nome (nome do arquivo), titulo (breve descricao do arquivo), conteudo (mediumblob), tipo (estou gravando text/plain)..


CREATE TABLE arquivos(
id int not null auto_increment primary key,
nome varchar(50),
titulo varchar(50),
conteudo mediumblob,
tipo varchar(50));

o q preciso na vdd sao 2 situacoes diferentes


1 - listar (feito sem problemas) e clicar link p download via browser do arquivo so isso, sendo q o conteudo do arquivo é pego do campo conteudo, e o nome do campo nome.. tudo q foi manual e tutorial revirado .. mais nao vai nem a pau.. inserir na tabela foi uma belezinha.. ate se alguem quiser.. segue um link no final do topico (funciona o insert download nao)

2 - qdo clicar.. da mesma forma.. mandar salvar diretamente no servidor dentro de uma pasta em especifico (NO SERVIDOR)... p q depois por exemplo pegue esse arquivo (q ja tem o nome) e envie por e-mail por exemplo (no caso de um PDF)


[url]http://www.oficinadanet.com.br/artigo/1599/manipulacao_de_dados_blob_com_php_e_mysql[/url]


Andre Ucella

Andre Ucella

Responder

Posts

05/12/2012

Eduardo Oliveira

Não pude entender sua dúvida por favor reformule a pergunta.
Responder

05/12/2012

Andre Ucella

entao.. o precisava na vdd era duas coisas.. distintas..


a primeira.. precisava salvar o arquivo no micro q esta acessando pelo navegador..



e

a outra situacao q é outro php. q nao tem nada a ver com a primeira.. salvar o arquivo lendo conteudo tbem .. so q ao inves de baixar.. é p salvar no servidor mesmo .. entendeu? tipo quero salvar na pasta do servidor /pdf

q qdo chamar por http://192.168.0.200/pdf ta la o arquivo


vc tem msn ou skype por favor.. p te explicar melhor?
Responder

05/12/2012

Andre Ucella

entao.. o precisava na vdd era duas coisas.. distintas..


a primeira.. precisava salvar o arquivo no micro q esta acessando pelo navegador..



e

a outra situacao q é outro php. q nao tem nada a ver com a primeira.. salvar o arquivo lendo conteudo tbem .. so q ao inves de baixar.. é p salvar no servidor mesmo .. entendeu? tipo quero salvar na pasta do servidor /pdf

q qdo chamar por http://192.168.0.200/pdf ta la o arquivo


vc tem msn ou skype por favor.. p te explicar melhor?
Responder

05/12/2012

Eduardo Oliveira

Vamos lá, você quer fazer o upload de arquivos para um servidor, para que um client qualquer ao acessar um determinado link possa baixa-lo ??? ou ainda enviar esse arquivo pra outro lugar é isso???

a primeira.. precisava salvar o arquivo no micro q esta acessando pelo navegador..


A única forma de você salvar o arquivo na máquina de quem está acessando pelo navegador que no caso seria o seu client, é permitindo a ele fazer o download, não tem como pelo menos até onde eu saiba você enviar coisas pra máquina do cliente sem que ele queira, mesmo que tenha não acredito ser uma boa prática.

A melhor forma de você fazer, si foi que eu entendi sua dúvida, é trabalhe com upload esse arquivo vai para em uma pasta qualquer dentro do servidor onde teu site está hospedado, veja no manual

http://php.net/manual/pt_BR/features.file-upload.post-method.php

Posteriormente, você pode criar um link pra esses arquivos que você faz o upload e disponibiliza-lo pra quem desejar baixar.

Qualquer dúvida vai postando a e :)

É interessante mantermos essa " discussão " para que outras pessoas com problemas parecidos senão iguais possam utiliza-la.
Responder

05/12/2012

Andre Ucella

vamos la.. entao.
rs
vamos uma coisa por vez..

quero salvar o arquivo na maquina q estou ..

vamos esquecer o UPLOAD

os dados ja estou na tabela.. vamos partir desse principio..
pode ser??




Responder

05/12/2012

Andre Ucella

Ops.. digo os dados ja estao na tabela.. dr..

rs



vamos la.. entao.
rs
vamos uma coisa por vez..

quero salvar o arquivo na maquina q estou ..

vamos esquecer o UPLOAD

os dados ja estou na tabela.. vamos partir desse principio..
pode ser??




Responder

05/12/2012

Eduardo Oliveira

Não estou entendendo o que seria salvar o arquivo em sua máquina....explique melhor para continuarmos, se quiser poste seu código, ou me fale mais sobre sua estrutura....
Responder

05/12/2012

Andre Ucella

salvar o arquivo do banco...
entendeu?
tipo no banco.. tenho o arquivo... q tem o nome teste.txt e com conteudo BLOB
ok?
isso no banco mysql .. entendeu???

ai eu acesso via navegador..e salvo o arquivo..


segue php q ta quase.. so q o conteudo do arquivo vem so q tem com as tags de HTML. q nao deveria..


<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$colname_Recordset1 = "-1";
if (isset($_GET['id'])) {
$colname_Recordset1 = $_GET['id'];
}
mysql_select_db($database_repositorio, $repositorio);
$query_Recordset1 = sprintf("SELECT id, nome, titulo, conteudo, tipo FROM arquivos WHERE id = %s ORDER BY id ASC", GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $repositorio) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$res = mysql_query($query_Recordset1);
$tipo = mysql_result($res, 0, "tipo");
$nome = mysql_result($res, 0, "nome");
$conteudo = mysql_result($res, 0, "conteudo");
header("Content-type: $tipo");
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$nome.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($nome));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
print $conteudo;
?>


----- ele ate salva.. so q vem com com o nome tudo certo.. conteudo ok..
so q no arquivo .. era p estar so

teste de conteudo.. de texto..



e vem



<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: filesize(): stat failed for teste.txt in C:\xampp\htdocs\WebNfeStorage\download\baixar_arquivo.php on line <i>53</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0016</td><td bgcolor='#eeeeec' align='right'>147168</td><td bgcolor='#eeeeec'>( )</td><td title='C:\xampp\htdocs\WebNfeStorage\download\baixar_arquivo.php' bgcolor='#eeeeec'>..\baixar_arquivo.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.1944</td><td bgcolor='#eeeeec' align='right'>152232</td><td bgcolor='#eeeeec'><a href='http://www.php.net/filesize' target='_new'>filesize</a>
( )</td><td title='C:\xampp\htdocs\download\baixar_arquivo.php' bgcolor='#eeeeec'>..\baixar_arquivo.php<b>:</b>53</td></tr>
</table></font>
teste de conteudo.. de texto..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>

<body>

<p> </p>
<p> </p>
<p> </p>

</body>
</html>









Responder

06/12/2012

Andre Ucella

Pessoal ate consegui.. mais ainda nao ta legal.. vou postar o codigo q to usando e funcionou em portes..

porem o problema.. é q mesmo q eu baixe o conteudo (mesmo q o arquivo nao exista), ele sempre acrescenta o conteudo denovo..

exemplo .. .

o arquivo é o teste.txt , de conteudo.. q possui so uma linha de conteudo.

teste de conteudo.. de texto..


so q se eu rodar 10 vezes. ele insere 10 vezes a linha.. .uma embaixo da outra.. e o mais interessante.. mesmo q entre as vezes... eu apague o arquivo.. ele cria o arquivo incrementado... de uma linha

é mole





mysql_select_db($database_repositorio, $repositorio);
$query_Recordset1 = sprintf("SELECT id, nome, titulo, conteudo, tipo FROM arquivos WHERE id = %s ORDER BY id ASC", GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $repositorio) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$res = mysql_query($query_Recordset1);
$tipo = mysql_result($res, 0, "tipo");
$nome = mysql_result($res, 0, "nome");
$conteudo = mysql_result($res, 0, "conteudo");
//Agora atribuímos tudo para uma variável só.
$documento = $conteudo;
//Aqui você coloca o nome do arquivo que será gravado
$arquivo = $nome;
//Abrimos o arquivo que será gravado.
$abrir = fopen($arquivo, "a");
//Gravamos no arquivo
$gravar = fwrite($abrir, $documento);
//Testa se foi gravado
if($gravar){
echo"Gravados com sucesso!";
fclose($abrir);
unset($conteudo,$abrir, $gravar, $diretoriodestino);
}else{
echo"Não gravado!";
}
Responder

06/12/2012

Felipe Ribeiro

Bom dia, Crie um arquivo php com o seguinte código..

Qualquer dúvida estamos aí..

arquivo.php
<?php
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="teste.txt"');

echo "testando download...";
?>
Responder

06/12/2012

Eduardo Oliveira

Man dei uma pesquisada encontrei esse artigo aqui falando sobre essa questão....

http://www.oficinadanet.com.br/artigo/1599/manipulacao_de_dados_blob_com_php_e_mysql


Mas me diga tem realmente a necessidade de armazenar o arquivo em banco ??? Uma solução alternativa, claro dependendo do teu problema que não o conheço em sua essência seria...

No banco você pode guardar todas informações referentes aos arquivos, nome, tipo, tamanho, e ter um campo chamado caminho onde a partir desse caminho e do campo nome, você montas as opções de listagens para download, etc.
Responder

06/12/2012

Andre Ucella

Ola.. Eduardo com esta.. tudo bem patrao?
entao preciso sim .. pois sao arquivos q sao exigidos pelo FISCO...
rs..

entende.. nao pode ser simplesmente arquivos... dentro do banco a integridade é melhor.. resolvido.. o problema..

segue..
pode finalizar... q esta perfeito as duas situacoes...


1 - baixa via browser (primeiro salvo no servidor.. e pego do servidor e transfiro usando os HEADER da vida...

$res = mysql_query($query_baixar_arquivo);
$tipo = mysql_result($res, 0, "tipo");
$nome = mysql_result($res, 0, "nome_xml");
$conteudo = mysql_result($res, 0, "xml");
$dirnome = '../tmp/'.$nome;





//Agora atribuímos tudo para uma variável só.
$documento = $conteudo;
//Aqui você coloca o nome do arquivo que será gravado
//$arquivo = $nome;
$arquivo = $dirnome;

//Abrimos o arquivo que será gravado.
$abrir = fopen($arquivo, "w");
//Gravamos no arquivo
$gravar = fwrite($abrir, $documento);
//Testa se foi gravado
//if($gravar){
//echo"Gravados com sucesso!";
fclose($abrir);


header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="' . $dirnome . '"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($dirnome));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($dirnome)



2 - salvar o arquivo em caminho absoluto exemplo no c:\arquivos no servidor


$res = mysql_query($query_baixar_arquivo);
$tipo = mysql_result($res, 0, "tipo");
$nome = mysql_result($res, 0, "nome_xml");
$conteudo = mysql_result($res, 0, "xml");
$dirnome = '../tmp/'.$nome;





//Agora atribuímos tudo para uma variável só.
$documento = $conteudo;
//Aqui você coloca o nome do arquivo que será gravado
//$arquivo = $nome;
$arquivo = $dirnome;

//Abrimos o arquivo que será gravado.
$abrir = fopen($arquivo, "w");
//Gravamos no arquivo
$gravar = fwrite($abrir, $documento);
//Testa se foi gravado
//if($gravar){
//echo"Gravados com sucesso!";
fclose($abrir);
Responder

07/12/2012

Eduardo Oliveira

Oh meu querido estou bem sim, entendi sua necessidade, e assim que tiver um tempo vou testar seu code :) feliz por ter resolvido, good codes!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar