Autor Zpráva
Argos
Profil *
Zdravim,
nevíte někdo jak odkázat na soubor tak aby to nabídlo dialog pro staženi/otevření, i přes to, že to je soubor který by si normálně přebral prohlížeč a spustil v defaultně nastavenym programu?(myslím že jsem o tom někde na jakpsatweb.cz čet ale teď když to potřebuju tak to nemůžu najít :-() Jestli třeba poslat nějakou hlavičku v php? (s hlavičkama ale nemám až tak moc zkušeností, takže nevím jakou) Samozřejmě by bylo nejlepší aby to fungovalo v co nejvíc prohlížečích... Jo jestli to pomůže tak potřebuju dát ke stažení *.mid
Dík za případný odpovědi. Argos
PerToon
Profil
Pokud vím, když dáš odkaz na mid, tak se tě to zeptá..
Argos
Profil *
nevim jak to je v jinejch win, ale v IE ve win XP to přebírá standartně windows media player...
Leo
Profil
Musite poslat ze serveru patricnou http hlavicku Content-disposition, zkuste si ji nekde pohledat. Leo
radimh
Profil
Řešení je v PHP:

http://www.linuxsoftware.cz//article.php?id_article=310

<?
$soubor = "31_test.html";

header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"$soubor\"");

readfile ($soubor);
?>

Stáhne soubor 31_test.html.
hubipe
Profil
Kdysi jsem komusi radil, tak jsem to vyhrabal ve svém e-mailu:

---------------------------------------------
Dobrý den
Udělal jsem si skript, který mi stáhne například obrázky (ve vašem případě i hudbu) ve formátu, která se normálně zobrazí/přehraje v prohlížeči. Nevím jaké máte zkušenosti z databází. Je totiž vhodné předávat (či získat) MIME typ downloadovaného souboru, ale není to nutné. Pokud máte muziku jen ve formátu mp3, mp3 má MIME typ audio/mpeg (podle mého pozorování ;-). Ukážu Vám nyní skript, který dostane jako GET parametr název souboru který se má stáhnout, například soubor hudba.mp3.


if(!IsSet($_GET['soubor'])):
Header('Location: ./index.php'); // nebyl předán GET parametr ($soubor) --> přesměrování zpět (kamkoliv)
exit;
endif;

$folder = '/absolutni/cesta/k/souboru/';
// zjistíme, zda-li soubor existuje
if(!File_Exists($folder.$_GET['soubor'])):
Header('Location: ./index.php'); // neexistuje, přesměrujeme zpět
exit;
endif;

$MIME = 'audio/mpeg'; // možno změnit, nebo jakkoliv podmínkovat; výstup bude ale vždy MIME typ stahovaného souboru

Header('Content-Type: '. $MIME);
Header('Content-Disposition: attachment; filename="'. $_GET['soubor'] .'"');
Header('Expires: 0');
Header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
Header('Pragma: public');

// nyní vypíšeme mp3 jako čistý text:
@ReadFile($folder.$_GET['soubor']);


Toto by mělo fungovat. Základem je druhá hlavička, která říká, aby prohlížeč soubor nezobrazil, ale nabídl "okno" k uložení na lokální disk počítače. Poslední tři hlavičky zase zaručí, že PHP skript nebude uložen do paměti prohlížeče (aby náhodou nevracel vždy stejný soubor).

Pokud by jste měl s tímto skriptem potíže (psal jsem ho z hlavy), zase mi napiště, pokusím se to opravit.
--------------------------------------------

Neozval se zpátky, tak asi s tím problémy nemá.
Školník
Profil
NAŠEL JSEM TOTO, ALE NEVÍM, PROČ MI TO NEFUNGUJE. MOHL BY TO JEŠTĚ NĚKDO VYZKOUŠET? DÍKY

Občas se může hodit vyvolat stahovací dialog v prohlížeči i pro soubory, které umí normálně zobrazit. Můžeme pomocí RewriteRule změnit mime-type souboru třeba na application/octet-stream a tak docílíme toho, že přebijeme základní nastavení apache. Pokud budeme chtít soubor takto stáhnout, přidáme za něj parametr stahnout.

RewriteEngine on
#RewriteBase /adresar
RewriteCond %{QUERY_STRING} ^stahnout$
RewriteRule \.(jpe?g|gif|png)$ - [L,NC,T=application/octet-stream]

Pokud na server přijde požadavek na soubor s koncovku jpg, jpeg, gif nebo png a je přidán parametr stahnout (například obrazek.jpg?stahnout), zapříčiní uvedená pravidla změnu mime-typu a tím vyvolají dialog pro stáhnutí. Změnu typu vyvolá parametr T. Parametr NC vypíná rozlišování velikosti písmen v RewriteRule. Koncovky, kterým chceme povolit stahování je dobré vyjmenovat, aby nám díky tomuto parametru někdo nestahoval třeba zdrojáky v php (pokud totiž takto změníme typ souboru, bude s ním apache podle toho zacházet a nebude brát php soubor jako skript).
Školník
Profil
A ještě oznámení na e-mail...
Toto téma je uzamčeno. Odpověď nelze zaslat.