21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
RASik
Profil *
Ahoj,
tak trochu experimentuju, a prosím o pomoc u možná naprosto triviální záležitosti nebo taky naprostého nesmyslu, který ale má (zkostnatělá) mysl momentálně nedává:
- mám v MySQL databázi vložené soubory různých typů - od textů přes obrázky až po zvuky
- vypíšu z DB informace o těchto souborech na stránku

Po zmáčknutí tlačítka formuláře u některého ze záznamů chci, aby prohlížeč klasicky nabídl soubor k otevření nebo uložení, ALE nechci, aby se mi uložil nikde na serveru. Lze to udělat? Prosím o naznačení. Děkuji.
Alphard
Profil
Vytvořte si nějakou download stránku (kvůli hlavičkám bude její jedinou zodpovědností předat soubor). Z databáze se vytáhne daný soubor, odešle se správná hlavička informující o typu,
header("Content-Disposition: attachment; filename=\"jmeno_souboru.pripona\"");
a obsah souboru se vypíše na výstup (pomocí echo).

Příklad hlaviček je třeba u funkce php.net/manual/en/function.readfile.php, fakt, že bude soubor vypisován z db, na tom nic nemění.
mimochodec
Profil
RASik:
nechci, aby se mi uložil nikde na serveru.

Nerozumím. Ono tě něco nutí ukládat soubory na server?

mám v MySQL databázi vložené soubory různých typů

Určitě máš v databázi soubory, nikoliv jen jejich názvy?
RASik
Profil *
[#2] Alphard
To bude ono, díky.

[#3] mimochodec
No, myslel jsem, že jo, aspoň doteďka - obsah jsem zapsal do souboru a nabídl odkaz, ale jednalo se vždycky o nějaký jeden konkrétní soubor...
mimochodec
Profil
RASik:
No, myslel jsem, že jo, aspoň doteďka

Tak už si to nemysli. Tak jak to popisuješ, ukládáš v databázi názvy souborů, nikoliv soubory. Alphard popisuje, jak zařídit, abys v databázi uložené soubory mohl stahovat, ale nepíše, jak je tam dostaneš. První návod, který mi našel google, je http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx - na první pohled tam nevidím nic problematického. Ale doporučil bych zvážit, jestli to tak opravdu chceš. Zkus naznačit, co tě k tomu postupu vede.
Alphard
Profil
mimochodec:
Alphard popisuje, jak zařídit, abys v databázi uložené soubory mohl stahovat, ale nepíše, jak je tam dostaneš.
Protože včera autor psal, že mu ukládání do db funguje, viz
Restartoval MySQL, zkusil vložit soubor bmp o velikosti 1800kB a FUNGUJE.
RASik
Profil *
[#5] mimochodec
Zatím jsem vždycky ukládal soubory na "server" (není to vpravdě server, ale obyč. uživatelský PC s Win7 na intranetu) a do DB ukládal opravdu jen potřebné údaje. Funguje to báječně a bez problému až do té doby, než uživatel potřeboval soubor smazat. Narážel jsem vždycky na nějaká omezení přístupových práv při unlink, takže se smazal jen záznam z DB, soubor zůstal.
Tím, že už TEĎ umím vkládat do DB i VELKÉ soubory, se prostě otevírají jiné možnosti (třeba vyhledávání v textech), otázka spíš bude, co je cesta menšího odporu a protože mě to baví, rád se v tom povrtám...
mimochodec
Profil
RASik:
otázka spíš bude, co je cesta menšího odporu

Nejsem si jist, jestli to je správný přístup. Jednodušší a rychlejší řešení mají tendenci skrývat záludnosti, které hned nevidíš a až se projeví, zaplatíš za ten "ušetřený" čas i s chlupama. V případě souborů v databázi bych doporučoval udělat si test, jak se to bude chovat, až tam těch souborů budeš mít třeba 10.000. Netvrdím, že to nepůjde, říkám: otestuj si to. Druhá věc: různé hostingy mívají různá omezení. Prověř si, jestli v tom tvém případu není nastaven nějaký limit velikosti databáze.
RASik
Profil *
[#8] mimochodec
Jasně, menší odpor neznamená rychlejší nebo jednodušší...
Mám to hodně jednoduché v tom, že sem na "své" uzavřené síti, server mám nastavený podle sebe, prakticky nic mě nenutí k zásadním upgradům čehokoliv, ve svém prostředí nemusím bojovat s potencionálními hackery, vím, že 10.000 souborů tam mít nikdy nebudu,
ALE
může se stát do budoucna cokoliv, takže otravuju vás a prostě se učím a zkouším...
Každopádně díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0