![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 4 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Skorzystałem z klasy zip() tworzącej w locie spakowane archiwa z pewną zawartością. Moją zawartością mają być pliki *doc, które aby otworzyć w MS WORD, najpierw trzeba wybrać dla nich odpowiednie kodowanie. Jak zrobić, jak generować takie pliki, aby nie mieć tego okienka??
Klasa wygląda następująco: Kod class zip { var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function addFile($data, $name) { $name = str_replace('\\', '/', $name); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= "\x00\x00\x00\x00"; // last mod time and date $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, strlen($zdata)-4),2); // fix crc bug $c_len = strlen($zdata); $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $fr .= pack('v', strlen($name)); // length of filename $fr .= pack('v', 0); // extra field length $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $this->datasec[] = $fr; $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= "\x00\x00\x00\x00"; // last mod time & date $cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('v', strlen($name)); // length of filename $cdrec .= pack('v', 0); // extra field length $cdrec .= pack('v', 0); // file comment length $cdrec .= pack('v', 0); // disk number start $cdrec .= pack('v', 0); // internal file attributes $cdrec .= pack('V', 32); // external file attributes - 'archive' bit set $cdrec .= pack('V', $this->old_offset); $this->old_offset += strlen($fr); $cdrec .= $name; $this->ctrl_dir[] = $cdrec; } function file() { $data = implode('', $this->datasec); $ctrldir = implode('', $this->ctrl_dir); return $data.$ctrldir.$this->eof_ctrl_dir. pack('v', sizeof($this->ctrl_dir)). // total # of entries "on this disk" pack('v', sizeof($this->ctrl_dir)). // total # of entries overall pack('V', strlen($ctrldir)). // size of central dir pack('V', strlen($data)). // offset to start of central dir "\x00\x00"; // .zip file comment length } function tofile($name) { $f = fopen($name, "wb"); fwrite($f, $this->file()); fclose($f); } function todownload($name) { header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=$name"); echo $this->file(); } } Natomiast plik generuję w następujący sposób: Kod $dane = @mysql_fetch_array($zap); $zip = new zip(); // tworzę nowy obiekt $jeden = $dane['tytul_'.$ln]; $dwa = $dane['tresc_'.$ln]; $dane = "\n".$jeden."\n\n".$dwa; //$dane = iconv("", "UTF-8", $dane); $zip->addfile($dane, "tekst.rtf"); $zip->todownload("archiwum.zip"); Jakieś rady?? Częściowo doszedłem już do wniosku, iż wina leży w pobieranych danych z bazy. Bo gdy tekst nie zawiera polskich znaków, to wszystko jest ok, gdy jednak zawiera, wówczas pojawia się okno z wyborem kodowania. Ale co z tym dalej?? Ten post edytował Czadus 23.12.2008, 16:54:37 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 22:44 |