123 lines
3.5 KiB
PHP
123 lines
3.5 KiB
PHP
|
<?php
|
||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||
|
|
||
|
/**
|
||
|
* HTTP::Download::Archive
|
||
|
*
|
||
|
* PHP versions 4 and 5
|
||
|
*
|
||
|
* @category HTTP
|
||
|
* @package HTTP_Download
|
||
|
* @author Michael Wallner <mike@php.net>
|
||
|
* @copyright 2003-2005 Michael Wallner
|
||
|
* @license BSD, revisewd
|
||
|
* @version CVS: $Id: Archive.php 304423 2010-10-15 13:36:46Z clockwerx $
|
||
|
* @link http://pear.php.net/package/HTTP_Download
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Requires HTTP_Download
|
||
|
*/
|
||
|
require_once 'HTTP/Download.php';
|
||
|
|
||
|
/**
|
||
|
* Requires System
|
||
|
*/
|
||
|
require_once 'System.php';
|
||
|
|
||
|
/**
|
||
|
* HTTP_Download_Archive
|
||
|
*
|
||
|
* Helper class for sending Archives.
|
||
|
*
|
||
|
* @access public
|
||
|
* @version $Revision: 304423 $
|
||
|
*/
|
||
|
class HTTP_Download_Archive
|
||
|
{
|
||
|
/**
|
||
|
* Send a bunch of files or directories as an archive
|
||
|
*
|
||
|
* Example:
|
||
|
* <code>
|
||
|
* require_once 'HTTP/Download/Archive.php';
|
||
|
* HTTP_Download_Archive::send(
|
||
|
* 'myArchive.tgz',
|
||
|
* '/var/ftp/pub/mike',
|
||
|
* HTTP_DOWNLOAD_BZ2,
|
||
|
* '',
|
||
|
* '/var/ftp/pub'
|
||
|
* );
|
||
|
* </code>
|
||
|
*
|
||
|
* @see Archive_Tar::createModify()
|
||
|
* @static
|
||
|
* @access public
|
||
|
* @return mixed Returns true on success or PEAR_Error on failure.
|
||
|
* @param string $name name the sent archive should have
|
||
|
* @param mixed $files files/directories
|
||
|
* @param string $type archive type
|
||
|
* @param string $add_path path that should be prepended to the files
|
||
|
* @param string $strip_path path that should be stripped from the files
|
||
|
*/
|
||
|
function send($name, $files, $type = HTTP_DOWNLOAD_TGZ, $add_path = '', $strip_path = '')
|
||
|
{
|
||
|
$tmp = System::mktemp();
|
||
|
|
||
|
switch ($type = strToUpper($type))
|
||
|
{
|
||
|
case HTTP_DOWNLOAD_TAR:
|
||
|
include_once 'Archive/Tar.php';
|
||
|
$arc = new Archive_Tar($tmp);
|
||
|
$content_type = 'x-tar';
|
||
|
break;
|
||
|
|
||
|
case HTTP_DOWNLOAD_TGZ:
|
||
|
include_once 'Archive/Tar.php';
|
||
|
$arc = new Archive_Tar($tmp, 'gz');
|
||
|
$content_type = 'x-gzip';
|
||
|
break;
|
||
|
|
||
|
case HTTP_DOWNLOAD_BZ2:
|
||
|
include_once 'Archive/Tar.php';
|
||
|
$arc = new Archive_Tar($tmp, 'bz2');
|
||
|
$content_type = 'x-bzip2';
|
||
|
break;
|
||
|
|
||
|
case HTTP_DOWNLOAD_ZIP:
|
||
|
include_once 'Archive/Zip.php';
|
||
|
$arc = new Archive_Zip($tmp);
|
||
|
$content_type = 'x-zip';
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
return PEAR::raiseError(
|
||
|
'Archive type not supported: ' . $type,
|
||
|
HTTP_DOWNLOAD_E_INVALID_ARCHIVE_TYPE
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ($type == HTTP_DOWNLOAD_ZIP) {
|
||
|
$options = array( 'add_path' => $add_path,
|
||
|
'remove_path' => $strip_path);
|
||
|
if (!$arc->create($files, $options)) {
|
||
|
return PEAR::raiseError('Archive creation failed.');
|
||
|
}
|
||
|
} else {
|
||
|
if (!$e = $arc->createModify($files, $add_path, $strip_path)) {
|
||
|
return PEAR::raiseError('Archive creation failed.');
|
||
|
}
|
||
|
if (PEAR::isError($e)) {
|
||
|
return $e;
|
||
|
}
|
||
|
}
|
||
|
unset($arc);
|
||
|
|
||
|
$dl = new HTTP_Download(array('file' => $tmp));
|
||
|
$dl->setContentType('application/' . $content_type);
|
||
|
$dl->setContentDisposition(HTTP_DOWNLOAD_ATTACHMENT, $name);
|
||
|
return $dl->send();
|
||
|
}
|
||
|
}
|
||
|
?>
|