---
title: "Zippa flera filer samtidigt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/151666-zippa-flera-filer-samtidigt"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "vic"
published: "2006-09-23T12:02:53.000Z"
updated: "2006-09-24T19:34:25.000Z"
replies: 1
views: 334
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/151666-zippa-flera-filer-samtidigt"
---

# Zippa flera filer samtidigt

## #1 — vic, 2006-09-23T12:02Z

Har ett script för att zippa flera filer samtidigt, det går dock inte att zippa fler än en fil åt gången, hur kan det komma sig=?

```php
<?php 

// Class definition found at http://www.zend.com/zend/spotlight/creating-zip-files3.php
// Some alterations to the original posted code were made in order to get everything working properly
// See example usage at the bottom of this page

class zipfile 
{ 
	var $datasec = array(); 
	var $ctrl_dir = array(); 
	var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; 
	var $old_offset = 0; 
	
	function add_dir($name) { 
		$name = str_replace("\\", "/", $name); 
		
		$fr = "\x50\x4b\x03\x04"; 
		$fr .= "\x0a\x00"; 
		$fr .= "\x00\x00"; 
		$fr .= "\x00\x00"; 
		$fr .= "\x00\x00\x00\x00"; 
		
		$fr .= pack("V",0); 
		$fr .= pack("V",0); 
		$fr .= pack("V",0); 
		$fr .= pack("v", strlen($name) ); 
		$fr .= pack("v", 0 ); 
		$fr .= $name; 
		$fr .= pack("V", 0); 
		$fr .= pack("V", 0); 
		$fr .= pack("V", 0); 
		
		$this -> datasec[] = $fr;
		$new_offset = strlen(implode("", $this->datasec)); 
		
		$cdrec = "\x50\x4b\x01\x02"; 
		$cdrec .="\x00\x00"; 
		$cdrec .="\x0a\x00"; 
		$cdrec .="\x00\x00"; 
		$cdrec .="\x00\x00"; 
		$cdrec .="\x00\x00\x00\x00"; 
		$cdrec .= pack("V",0); 
		$cdrec .= pack("V",0); 
		$cdrec .= pack("V",0); 
		$cdrec .= pack("v", strlen($name) ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$ext = "\x00\x00\x10\x00"; 
		$ext = "\xff\xff\xff\xff"; 
		$cdrec .= pack("V", 16 ); 
		$cdrec .= pack("V", $this -> old_offset ); 
		$cdrec .= $name; 
		
		$this -> ctrl_dir[] = $cdrec; 
		$this -> old_offset = $new_offset; 
		return; 
	} 
	
	function add_file($data, $name) { 
		$fp = fopen($data,"r");
		$data = fread($fp,filesize($data));
		fclose($fp);
		$name = str_replace("\\", "/", $name); 
		$unc_len = strlen($data); 
		$crc = crc32($data); 
		$zdata = gzcompress($data); 
		$zdata = substr ($zdata, 2, -4); 
		$c_len = strlen($zdata); 
		$fr = "\x50\x4b\x03\x04"; 
		$fr .= "\x14\x00"; 
		$fr .= "\x00\x00"; 
		$fr .= "\x08\x00"; 
		$fr .= "\x00\x00\x00\x00"; 
		$fr .= pack("V",$crc); 
		$fr .= pack("V",$c_len); 
		$fr .= pack("V",$unc_len); 
		$fr .= pack("v", strlen($name) ); 
		$fr .= pack("v", 0 ); 
		$fr .= $name; 
		$fr .= $zdata; 
		$fr .= pack("V",$crc); 
		$fr .= pack("V",$c_len); 
		$fr .= pack("V",$unc_len); 
		
		$this -> datasec[] = $fr; 
		$new_offset = strlen(implode("", $this->datasec)); 
		
		$cdrec = "\x50\x4b\x01\x02"; 
		$cdrec .="\x00\x00"; 
		$cdrec .="\x14\x00"; 
		$cdrec .="\x00\x00"; 
		$cdrec .="\x08\x00"; 
		$cdrec .="\x00\x00\x00\x00"; 
		$cdrec .= pack("V",$crc); 
		$cdrec .= pack("V",$c_len); 
		$cdrec .= pack("V",$unc_len); 
		$cdrec .= pack("v", strlen($name) ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("v", 0 ); 
		$cdrec .= pack("V", 32 ); 
		$cdrec .= pack("V", $this -> old_offset ); 
		
		$this -> old_offset = $new_offset; 
		
		$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)) . 
			pack("v", sizeof($this -> ctrl_dir)) . 
			pack("V", strlen($ctrldir)) . 
			pack("V", strlen($data)) . 
			"\x00\x00"; 
	} 
}

require ("../../../../../webadmin/admin/connect_to_db.php");

// Skapa slumpmässigt kod som kommer vara kärnarn i hela utbytet mellan kund och znap
 $random = ""; 
 $antal = 5; 
 for ($n = 0; $n <= $antal; $n++)
 	{
	$random .= chr(rand(65,90));
	} 

// Zippa låtarna
$zipTest = new zipfile();
$zipTest->add_dir("$random/");

$sess_result = mysql_query("SELECT * FROM mp3");
while($row = mysql_fetch_array($sess_result))
		{ 
		 if($v1 == $row['id'])
				{
				$zipTest->add_file("../".$row['namn']."", "".$row['namn']."");
				}
		 if($v2 == $row['id'])
				{
				$zipTest->add_file("../".$row['namn']."", "../".$row['namn']."");
				} 

		}

			$filename = "$random.zip";
			$fd = fopen ($filename, "wb");
			$out = fwrite ($fd, $zipTest -> file());
			fclose ($fd);
			
			echo "<a href=\"" .$filename. "\">Click here to download the new zip file" .$random.".</a>";

?>
```

Permalänk: https://www.webforum.nu/p/151666

## #2 — stevenet, 2006-09-24T19:34Z

1\. Du definierar filnamn utanför loopen.

2\. Du skriver/sparar filen utanför loopen.

Permalänk: https://www.webforum.nu/p/1871333

---

Tråden på webben: https://www.webforum.nu/amne/php/151666-zippa-flera-filer-samtidigt
