FileResponse – první znak souboru je hex 09

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip111
Člen | 244
+
0
-

Ahoj, narazil jsem na podivné chování při stahování příloh.
Reference na soubory mám uložené v DB, odtud načtu místo a název souboru a pomocí FileResponse vrátím.
Když ale srovnám soubor na FTP se staženým souborem, tak ten stažený má na začátku navíc jeden znak, hexadecimálně je to 09 (co do velikosti jsou na byte stejný).
Už jste se s tím setkali?

PDF souborům to nijak nevadí a jdou otevřít, ale třeba jpeg obrázky už windows neotevřou (např. XnView si s tím poradí, ale klasický prohlížeč obrázků z windows nebo IE nikoliv).

$dr = new FileResponse(
      WWW_DIR. $att['path'] . $att['filename'],
      $att['filename'],
      "application/text"
);
$this->sendResponse($dr);

Napadlo mě, že jsem trochu odfláknul MIME typy a tak jsem zkusil dát image/jpeg nebo i další, ale bez výsledku.
Cílem je donutit prohlížeč uložit soubor vždy na disk.

Díky.

Honza Kuchař
Člen | 1662
+
0
-

Nevim, jestli se trefim, ale zkus si zkrontrolovat utf-8 BOM. Na foru jsem kdysi publikoval dokonce kod na autamoticke odstraneni ze vsech php souboru… Treba jsem ti tim pomohl…

David Grudl
Nette Core | 8228
+
0
-

Kód na automatické odstranění BOM je součástí frameworku, Tools/Code-Checker

Filip111
Člen | 244
+
0
-

Zkoušel jsem to prohnat code checkerem, ale zdrojáky jsou bez BOM. Tam tedy problém není.
Navíc jsem koukal na wiki, kde jsou popsaný formáty BOM a žádný nezačíná hex 09.

Nemáte ještě nějaký nápad?
Příp. nemůžete někdo porovnat Váš soubor na FTP a stažený jestli je skutečně stejný? (nikoliv na velikost ale na první znaky).

fak
Člen | 48
+
0
-

ja jsem napriklad zjistil, ze mi to dela extra radek v Session Panelu před sekvenci <?php

tohle totiz code checker neodstranuje

Já bych tam prostě Davide ten ob_clean do toho FileResponse šoupnul, vidíš jaký blbosti způsobuje jedna mezera před výstupem binárního souboru…

Editoval fak (23. 8. 2012 11:59)