Архивиране и сваляне

webdeveloper

Registered
Здравейте, да речем, че имам 3 файла:

http://site1.com/file1.jpg
http://site2.com/file2.mp3
http://site3.com/file3.flv

Как мога след като има урл адресите им чрез някакъв php скрипт да ги архивирам в един zip или rar архив и да ги предоставя на потребителя за сваляне?
 
PHP:
<?php
$files = array("file.mp3","file2.jpg","file3.wav");
$zip = new ZipArchive();
$zip->open("zip.zip",ZIPARCHIVE::CREATE);
foreach($files as $file){
$zip->addFile($file);
}
$zip->close();
echo "<a href=\"download.php\"?id=".$zipid;
?>

RAR файлове може само да четеш с PHP заради това че рар има платен лиценз ако не се лъжа. Но все пак зип класът на PHP е достатъчно функционален :).

http://php.net/manual/en/book.zip.php
 
PHP:
	/* creates a compressed zip file */
	function create_zip($files = array(),$destination = '',$overwrite = false) {
	  //if the zip file already exists and overwrite is false, return false
	  if(file_exists($destination) && !$overwrite) { return false; }
	  //vars
	  $valid_files = array();
	  //if files were passed in...
	  if(is_array($files)) {
		//cycle through each file
		foreach($files as $file) {
		  //make sure the file exists
		  if(file_exists($file)) {
			$valid_files[] = $file;
		  }
		}
	  }
	  //if we have good files...
	  if(count($valid_files)) {
		//create the archive
		$zip = new ZipArchive();
		if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
		  return false;
		}
		//add the files
		foreach($valid_files as $file) {
		  $zip->addFile($file,$file);
		}
		//debug
		//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
		
		//close the zip -- done!
		$zip->close();
		
		//check to make sure the file exists
		return file_exists($destination);
	  }
	  else
	  {
		return false;
	  }
	}
	
	$files_to_zip = array(
	  'file1.jpg',
	  'file2.mp3',
	  'file3.flv'
	);
	//if true, good; if false, zip creation failed
	$result = create_zip($files_to_zip,'archive.zip');
:?:
 
kopura каза:
PHP:
<?php
$files = array("file.mp3","file2.jpg","file3.wav");
$zip = new ZipArchive();
$zip->open("zip.zip",ZIPARCHIVE::CREATE);
foreach($files as $file){
$zip->addFile($file);
}
$zip->close();
echo "<a href="download.php"?id=".$zipid;
?>

RAR файлове може само да четеш с PHP заради това че рар има платен лиценз ако не се лъжа. Но все пак зип класът на PHP е достатъчно функционален :).

http://php.net/manual/en/book.zip.php

Не е ли проблем това, че файловете са на чужд хост, а не на моят? Както съм написал и в първият си пост "http://site1.com/file1.jpg" и т.н.

Имам база данни с линкове към файлове (да речем, че са 10 записите).
Структура на таблицата: id,url,opisanie

И искам да дам на потребителите възможност да свалят всичките тези файлове архивирани в zip архив.
 
webdeveloper каза:
kopura каза:
PHP:
<?php
$files = array("file.mp3","file2.jpg","file3.wav");
$zip = new ZipArchive();
$zip->open("zip.zip",ZIPARCHIVE::CREATE);
foreach($files as $file){
$zip->addFile($file);
}
$zip->close();
echo "<a href="download.php"?id=".$zipid;
?>

RAR файлове може само да четеш с PHP заради това че рар има платен лиценз ако не се лъжа. Но все пак зип класът на PHP е достатъчно функционален :).

http://php.net/manual/en/book.zip.php

Не е ли проблем това, че файловете са на чужд хост, а не на моят? Както съм написал и в първият си пост "http://site1.com/file1.jpg" и т.н.

Имам база данни с линкове към файлове (да речем, че са 10 записите).
Структура на таблицата: id,url,opisanie

И искам да дам на потребителите възможност да свалят всичките тези файлове архивирани в zip архив.
Не можеш ли да им удариш едно бързо copy на твоя хост и след това да ги изтриеш след като ги направиш на zip :idea:
 
Аз ще ги копирам, но до сега не съм се занимавал с подобно нещо и не се сещам как точно да направя така, че след като се копират, архивират и потребителя свали архива, всичко да се изтрива.
 
webdeveloper каза:
Аз ще ги копирам, но до сега не съм се занимавал с подобно нещо и не се сещам как точно да направя така, че след като се копират, архивират и потребителя свали архива, всичко да се изтрива.
Може би с този код който ти дадох по-горе. Правиш преди кода copy() даваш имената на файловете, и след фукцията слагаш unlink() :)
 

Back
Горе