Autor | Zpráva | ||
---|---|---|---|
Pavel Dumbrovský Profil |
#1 · Zasláno: 24. 11. 2011, 14:40:43
Dobrý den,
měl bych celkem stručný dotaz. Následující kód mám pro stažení souborů: header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($cesta.$soubor)); 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($cesta.$soubor)); ob_clean(); flush(); readfile($cesta.$soubor); exit; Ovšem všechny názvy souborů mám s diakritikou, jsou v nich mezery, zkrátka nic moc. V chromu to funguje ok, sobor se stáhne. V IE jak kdy (velmi zvláštní) - 3x to vyhodí chybu, pak soubor již lze stáhnout, jak kdy. Ve firefoxu je to ještě horší, tam se stáhne soubor s názvem jen po první mezeru, takže to nejde spustit. Za předpokladu, že s názvy souborů nemůžu hýbat, lze to nějak ošetřit? Díky. |
||
Ugo Profil |
#2 · Zasláno: 24. 11. 2011, 14:59:55
ten soubor přejmenuj pro stažení (filename=novy_nazev) a pro IE bych tam dal prazdny hlavičky Pragma, Cache .. má s nimi problém, odzkoušeno že je stačí nastavit na prázdné, nevím jak funguje s těmito, možná to je ta hodnota kterou umí :)
|
||
Pavel Dumbrovský Profil |
#3 · Zasláno: 24. 11. 2011, 15:07:15
Ano, přejmenovat soubor hned po nahrátí, nebo pro stažení by bylo ideální a jednoduché. Ale já bych potřeboval vědět, zda-li existuje řešení, když se soubor s tím samým názvem musí i stáhnout?
|
||
Tori Profil |
#4 · Zasláno: 24. 11. 2011, 15:21:26 · Upravil/a: Tori
Pavel Dumbrovský:
„Ve firefoxu je to ještě horší, tam se stáhne soubor s názvem jen po první mezeru“ Pro začátek bych dala název souboru do uvozovek header('Content-Disposition: attachment; filename="'.basename($cesta.$soubor).'"'); |
||
Pavel Dumbrovský Profil |
#5 · Zasláno: 24. 11. 2011, 15:38:41
Tori:
Díky, ty uvozovky pomohly, vida. :) Akorát v IE je problém, týká se to pouze souborů ve kterých je diakritika, mezery nevadí. Když se soubor stáhne, tak nejde otevřít (pdf). Háže to chybu, že soubor není podporován, nebo byl porušen při transferu. Co s tímhle? Děkuju! |
||
Tori Profil |
#6 · Zasláno: 24. 11. 2011, 15:43:46
Pavel Dumbrovský:
„Háže to chybu, že soubor není podporován, nebo byl porušen při transferu“ A co z toho to tedy je? Když dáte na serveru odesílat soubory pod nějakým jménem bez mezer a diakritiky (třeba napevno napsané), dá se otevřít? A když ho stáhnete přes FTP, tak taky nepůjde? (= kde na té cestě klient--server--klient dochází k poškození, pokud vůbec). |
||
Pavel Dumbrovský Profil |
#7 · Zasláno: 24. 11. 2011, 15:46:21
Tori:
Na serveru je to ok. Přes Chrome a Firefox je stahování všech souborů již ok. Pouze přes IE se ten soubor stáhne a má 0 bytů. |
||
Pavel Dumbrovský Profil |
#8 · Zasláno: 24. 11. 2011, 15:48:33
Jakmile ošetřím to stahování souboru podmínkou file_exists , tak v IE vyhodí chybu, nenajde ho..
|
||
Kajman_ Profil * |
#9 · Zasláno: 24. 11. 2011, 15:50:06
Pavel Dumbrovský:
Pokud tyto proměnné získáváte z querystringu, tak mohou prohlížeče posílat query string v různém kódování. Zjistěte ho a použijte případně iconv. |
||
Kajman_ Profil * |
#10 · Zasláno: 24. 11. 2011, 15:51:51
Nebo používejte urlencode už při generování odkazů.
|
||
Pavel Dumbrovský Profil |
#11 · Zasláno: 24. 11. 2011, 15:52:30
Pravděpodobně to bude kódováním, když kouknu na soubory s diakritikou přes ftp, tak místo Sáblík je tam SáblĂk . Ostatní prohlížeče si s tím poradí, IE ne.. Ale tak toto už bych asi mohl obejít tím, že soubory budu ukládat s nějakým rozumným názvem a na výstupu při stahování jim zase vrátím původní název, který si schovám v DB..
|
||
Pavel Dumbrovský Profil |
#12 · Zasláno: 24. 11. 2011, 15:56:38
Problém je tedy v tom, že soubory se na server uloží s rozkódovaným názvem. Jakou fci použít, abych to dal dokupy?
|
||
Knight Profil |
#13 · Zasláno: 24. 11. 2011, 17:27:29
Pokud nejsou na ftp potřeba originální názvy, dalo by se použít třeba uniqid().
Ale proč je v nich potřeba diakritika? S tím jsou jen problémy. Nebylo by lepší je přejmenovávat do tvaru nazev-souboru-bez-nezadoucich-znaku-a-diakritiky.abc? |
||
Pavel Dumbrovský Profil |
#14 · Zasláno: 24. 11. 2011, 17:28:52
Ano, asi to tak udělám. Jen mě zajímalo, proč pouze v IE je s tím problém.
|
||
Knight Profil |
#15 · Zasláno: 24. 11. 2011, 17:38:04
Problém bude zřejmě v tom, že IE čeká název souboru v kódování windows 1250.
header('Content-Disposition: attachment; filename="' . iconv("UTF-8", "cp1250", basename($cesta.$soubor)) . '"'); Tohle by mělo v IE fungovat. Samo se tam musí změnit to vstupní kódování. |
||
Pavel Dumbrovský Profil |
#16 · Zasláno: 24. 11. 2011, 18:02:29
V IE to opravdu pomohlo, ale zase to poškodilo ostatní prohlížeče.. Fakt jsou s tím jen problémy, soubor nazvu podle ID, při výstupu mu vnutím název z DB a hotovo.
Všem mockrát děkuji za cenné rady! |
||
SeparateSK Profil |
#17 · Zasláno: 24. 11. 2011, 18:24:09
Co tak:
$soubor=str_replace(" ","%20",$soubor); alebo $soubor=urlencode($soubor); |
||
Časová prodleva: 12 let
|
0