Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z generowanymi plikami *doc w php
Czadus
post
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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 22:44