Example #1
0
 static function compress($target_file, $root_dir, $properties = array())
 {
     $tmp_file = File::newTempFile();
     $writer = $tmp_file->openWriter();
     $binarydata = pack("a3", self::FF_ARCHIVE_HEADER);
     $writer->write($binarydata);
     $binarydata = pack("v3", self::CURRENT_MAJOR, self::CURRENT_MINOR, self::CURRENT_REV);
     $writer->write($binarydata);
     //properties
     if (count($properties) == 0) {
         $properties_as_string = "";
     } else {
         $properties_as_string = PropertiesUtils::saveToString($properties, false);
     }
     $binarydata = pack("v", strlen($properties_as_string));
     $writer->write($binarydata);
     $binarydata = pack("a*", $properties_as_string);
     $writer->write($binarydata);
     //end properties
     $metadata_pos = $writer->pos();
     //num_entries
     $binarydata = pack("v", 0);
     $writer->write($binarydata);
     $total_entries = self::__recursive_compress_dir($writer, $root_dir, $root_dir);
     $writer->seek($metadata_pos);
     $binarydata = pack("v", $total_entries);
     $writer->write($binarydata);
     $writer->close();
     $final_dir = $target_file->getDirectory();
     $final_dir->touch();
     $final_name = $target_file->getFilename();
     $tmp_file->move_to($final_dir, $final_name);
 }