MySQL blob alanda FPDF php kütüphanesi ile oluşturulmuş bir PDF kaydet

5 Cevap php

I need to create a pdf file with the fpdf library and save it in a blob field in my MySQL database. The problem is, when I try to retrieve the file from the blob field and send it to the browser for the download, the donwloaded file is corrupted and does not display correctly.

Aynı pdf dosyası doğru ben db depolamak olmadan tarayıcınıza hemen göndermek görüntülenir, bu yüzden db takıldığında bazı verileri bozulmuş olur gibi görünüyor.

Benim kod böyle bir şey:

$pdf = new MyPDF(); //class that extends FPDF and create te pdf file
$content = $pdf->Output("", "S"); //return the pdf file content as string
$sql = "insert into mytable(myblobfield) values('".addslashes($content)."')";
mysql_query($sql);

pdf depolamak ve bu gibi için:

$sql = "select myblobfield from mytable where id = '1'";
$result = mysql_query($sql);
$rs = mysql_fetch_assoc($result);
$content = stripslashes($rs['myblobfield']);
header('Content-Type: application/pdf');
header("Content-Length: ".strlen(content));
header('Content-Disposition: attachment; filename=myfile.pdf');
print $content;

to send it to the browser for downloading. What am I doing wrong?

: Ben benim kodunu değiştirirseniz

$pdf = new MyPDF(); 
$pdf->Output(); //send the pdf to the browser

Dosya doğru görüntülenir, bu yüzden bu doğru oluşturulan ve sorun db saklamak olduğunu varsayalım edilir.

Şimdiden teşekkürler.

5 Cevap

Herhangi bir (geri) eğik şerit olmamalıdır. Bunları eklediğinizde, bunlar sorguda kaçış karakter olarak kullanılan ve alanında görünmüyor.

Bu değiştirmeyi deneyin

$content = stripslashes($rs['myblobfield']);

Bu içine:

$content = $rs['myblobfield'];

Aslında güvenlik nedenleriyle:

  1. addslashes() kullanmak yerine mysql_real_escape_string() kullanmayın

Bu özel durumda, (bu ikili veri olduğu gibi) hazırlanmıştır:

  1. Sökün stripslashes()
  2. addslashes() mysql_real_escape_string() ile değiştirin

Sorunu gidermenize yardımcı olmak dizeleri farklılıkları karşılaştırın.

$pdf = new MyPDF();
echo $pdf->Output("", "S"); //send the pdf string to the browser
exit;

ve

$pdf = new MyPDF(); //class that extends FPDF vecreate te pdf file
$content = $pdf->Output("", "S"); //return the pdf file content as string
$sql = "insert into mytable(myblobfield) values('".addslashes($content)."')";
mysql_query($sql);
$sql = "select myblobfield from mytable where id = '1'";
$result = mysql_query($sql);
$rs = mysql_fetch_assoc($result);
$content = stripslashes($rs['myblobfield']);
echo $content; //send the pdf string to the browser
exit;

Değiştirilmesi

header("Content-Length: ".strlen(content)); 

ile

header("Content-Length: ".strlen($content)); 

benim için çalıştı.

IT ÇÖZÜLDÜ!

Ben de aynı sorunu yaşıyorum ve yukarıda belirtilen fikirleri çalışıyordu. Benim için bu sabit benim MySQL veritabanı blob yerine mediumblob olarak PDF saklamak olmasıydı. Bir blob alan 64 K sınırlıdır ve dolayısıyla EOF (dolayısıyla pis Adobe Error) dahil olmak üzere değerli verileri dahil benim PDF kalanını kesiliyor edildi.

, Onaylamak yerine kadar hizmet PDF dosyasını indirmek ve dosya boyutu bakmak için. Tam 64K ise size mediumblob için alan ayarlayarak DB daha fazla yer açmak gerekir.

Teşekkürler yardım için herkes!

Bu arada, ben Toto tavsiyesi takip ve birlikte, mysql_real_escape_string() yerine kullanılabilir:

  1. Sökün stripslashes()
  2. addslashes() mysql_real_escape_string() ile değiştirin

Orijinal web kod ile bu değişiklikler işe yaradı!