Autor Zpráva
Milan1236000
Profil
Zdravím,
jak mám dostat PDF soubor z databáze? Zkoušel jsem
<?php
$pripojeni = new mysqli("localhost", "user", "pwd", "db");
if ($pripojeni->connect_errno > 0) die("Chyba při připojení.");
$pripojeni->query("SET NAMES utf8");
$vysledek = $pripojeni->query("SELECT * FROM `tabulka` WHERE Id=\"1\"");
while($zaznam = $vysledek->fetch_object()) printf("%s", $zaznam->Pdf);
$pripojeni->close();
?>
ale ve výsledku se zobrazí jen tisíce následujících znaků ���2�}���x�B�(vDĦQ�٣�Eئ҃(��Ӳ2�=Uɦ���h�)O���Mo���

Kdyby to bylo moc složité, napadlo mě to načíst klasicky z adresáře, jen jsem to chtěl mít v databázi při jednom. Jak na to?

Mimochodem, všiml jsem si, že v databázi se ten PDF soubor ukazuje jako Binární - neupravujte (82,9 KiB) a po stažení je to soubor s koncovkou .bin, jak to?
Alphard
Profil
Binárka je v pořádku, jen tam chybí správné hlavičky. Cyklus při výpisu je zbytečný a použil bych jen echo.
Milan1236000
Profil
Díky za radu. Už se vše zobrazuje, jak má, ale vždy se stáhne pouze prázdný pdf soubor (velký asi 6 kB, oproti originálnímu nahranému - asi 80 kB). Po odkomentování příkazů a zároveň zakomentováním dalších příkazů až do konce tagu ?> se při načtení stránky stáhne jakýsi soubor s popisem "pdf" a velikostí 0 B. Proč se při najetí na odkaz zobrazuje adresa aktuální zobrazené stránky? Ještě dotaz ohledně těch hlaviček. Musejí tam být všechny? Přece jen jich není málo.
<a href="
<?php>
$pripojeni = new mysqli("localhost", "user", "pwd", "db");
if ($pripojeni->connect_errno > 0) die("Chyba při připojení.");
$pripojeni->query("SET NAMES utf8");
$vysledek = $pripojeni->query("SELECT * FROM `maturitni_prace` WHERE Id=\"1\"");

/*$file = $vysledek->Pdf .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp); */

$file = $vysledek->Pdf;
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Type: application/force-download");
    header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
    // header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>" target="_blank" type="application/octet-stream" download="yourpdf.pdf">
<img src="soubory/pdf.gif" height="150" width="150"></a>
Alphard
Profil
Takhle ne. V tom html bude jenom odkaz na soubor, který vypisuje pdf. Samotný výpis bude na vlastní stránce, kde se kromě binárky pdf souboru nevypíše vůbec nic. Ostatně, je to naznačeno i v tom příspěvku na stackoverflow, který jsem posílal.

Kdyby bylo třeba zobrazit pdf uvnitř html stránky, musí se to dělat jinak.
Milan1236000
Profil
Aha, no, vidím, že tohle je asi nad moje síly. Dám tam klasický odkaz na soubor v adresáři a bude to vyřešené...
Možná někdy v budoucnu, až na to budu mít větší nervy, to vyzkouším znovu. :) Každopádně díky za rady.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: