Autor Zpráva
matusicaa
Profil *
Dobry den, potrebujem radu ohladne force downloadu DOC suboru. Niektore dokumenty mi stahuje normalne, ale niektore uplne zle prekodovane a nedaju sa zobrazit...Napriklad take kde je nejaka tabulka tak uz to nejde.... Netusim čim to je.. Tu je kod:
switch ($file_extension) {
case "doc":
$contenttype = "application/vnd.ms-word";
break;
case "docx":
$contenttype = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
break;}
        header("Content-Description: File Transfer"); 
        header("Content-Type: ".$contenttype.""); 
        header("Content-Disposition: attachment; filename=\"".basename($path)."\""); 
        header("Content-Transfer-Encoding: binary;");

        readfile ($path); 
Som uz v koncoch, prosim pomozte
Majkl578
Profil
Uvedený kód se mi principielně zdá v pořádku.
Hlavičky Content-Description a Content-Transfer-Encoding jsou nejspíš zbytečné, naopak by bylo vhodné přidat Content-Length.
Určitě jsou soubory těsně před odesláním v pořádku?
Michel
Profil
matusicaa:
A nemělo by být mezi řádky 8 a 9 vloženo header("Content-Type: application/force-download");?
matusicaa
Profil *
[#2] Majkl578Hlavicky som odstranil a pridal som content lenght no ani to nepomohlo.. A ano vsetko je dobre uplaodnute na servery..ked to stihanem cez FTP tam subor je neporuseny...avsak akonahle cez henten kod tak nastane chyba...Napadama ci nie je chyba u poskytovatela serveru...

[#3] MichelSkusal som no stale to iste...
Virtus
Profil
mně zatím vždy a všude fungovala tato konstrukce:
header("Content-Disposition: attachment; filename=\"$fileName\"");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($fileName));
header("Content-Type: ".mime_content_type($fileName)." charset=utf-8");
$fileContents = file_get_contents($fileName);

echo $fileContents;
die();
aDAm
Profil
matusicaa:
a nevyechuje se ti tam náhodou něco?
Majkl578
Profil
$length = filesize($fileName);

header('Content-Type: application/octet-stream'); // vynucení downloadu
header('Content-length: ' . $length); // délka výstupu
header('Content-Disposition: attachment; filename="' . basename($fileName) . '"'); // název souboru

$handle = fopen($fileName, 'r');
while (!feof($handle) && $length > 0) {
    echo $s = fread($handle, min(4e6, $length));
    $length -= strlen($s);
}
fclose($handle);

exit;

Takto by to mělo být naprosto postačující. Pokud to ani teď fungovat nebude, nejspíš je špatně něco jiného. Ujisti se, že nikde nejdou na výstup jiná data a/nebo hlavičky.
matusicaa
Profil *
Majkl578 a Virtus
Zial ani toto mi nechce fungovat a dokumenty su stale nejako divne kodovane... A nie nic sa mi nedostava na vystup..vytvoril som si priamo metodu v Codeinigteri a naozaj nic sa mi nedostava na vystup ineho ako toto..ale na localhoste mi to funguje bezproblemovo..takze chyba asi bude na strasne poskytovatela servera, tak skusim najst riesenie tam..ale dakujem za vsetky rady, aspon viem, ze u mna chyba nie je...
Virtus
Profil
Můžete si na serveru zkusit "pohrát" s funkcemi jako jsou: mb_internal_encoding() a ini_set() - ini_set('default_charset', 'utf-8'), možná i další, mohli by třeba pomoct.
matusicaa
Profil *
Dostal som odpoved od spravcu servera:
servery su nastavene standardne na utf-8, avsak subor doc ktory ste nam poslali ako vzor je kodovany schemou windows-1250. Pre zabezpecenie kompatibility odporucame zmenit nastavenie charsetu pre jednotlive typy dokumentov (napr. v subore .htaccess), Viac informacii je dostupnych tu: http://www.w3.org/International/questions/qa-htaccess-charset.en

avsak ani po pridani riadkov do htacces:

AddCharset UTF-8 .doc
AddCharset UTF-8 .docx
AddCharset UTF-8 .xls
AddCharset UTF-8 .xlsx

sa nic nezlepsilo...
Virtus
Profil
Nejsem si jistý, moc dobře anglicky neumím (= translate.googl.com), ale nemělo by to spíš vypadat takhle, podle toho co mi google z http://www.w3.org/International/questions/qa-htaccess-charset.en přeložil:
AddCharset windows-1250 .doc
AddCharset windows-1250 .docx
AddCharset windows-1250 .xls
AddCharset windows-1250 .xlsx
matusicaa
Profil *
nepomohlo....
Virtus
Profil
Další možnost co mně napadá, zkusil jste tohle?:
header("Content-Type: ".mime_content_type($fileName)." charset=windows-1250"); //[#5]
//nebo
header('Content-Type: application/octet-stream charset=windows-1250'); //[#7]
Davex
Profil
matusicaa:
Příčina problému by mohla být někde úplně jinde a možná by se hodil odkaz na živou ukázku.

Nenapadá mě důvod, proč by měl Word (nebo v čem je otevíráš?) koukat na charset v HTTP hlavičce staženého dokumentu.

Virtus:
Před charset chybí středník.
matusicaa
Profil *
Spravil som pure php verziu bez codeignitera a tam to ide...zaujimave, ze by mal codeigniter nejake nastavenia?

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: