Esempio n. 1
0
 private function streamFileData($stream, $compress, $level)
 {
     $dataLength = Count64::construct(0, !$this->zip64);
     $gzLength = Count64::construct(0, !$this->zip64);
     $hashCtx = hash_init('crc32b');
     if (COMPR::DEFLATE === $compress) {
         $compStream = DeflateStream::create($level);
     }
     while (!feof($stream)) {
         $data = fread($stream, self::STREAM_CHUNK_SIZE);
         $dataLength->add(strlen($data));
         hash_update($hashCtx, $data);
         if (COMPR::DEFLATE === $compress) {
             $data = $compStream->update($data);
         }
         $gzLength->add(strlen($data));
         $this->write($data);
         $this->flush();
     }
     if (COMPR::DEFLATE === $compress) {
         $data = $compStream->finish();
         $gzLength->add(strlen($data));
         $this->write($data);
         $this->flush();
     }
     $crc = unpack('N', hash_final($hashCtx, true));
     return array($dataLength, $gzLength, $crc[1]);
 }