PHP Classes
elePHPant
Icontem

File: download.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Robert Kummer  >  php-downloader  >  download.php  >  Download  
File: download.php
Role: Application script
Content type: text/plain
Description: php-downloader
Class: php-downloader
a simple downloader with compressing support
Author: By
Last change:
Date: 12 years ago
Size: 5,360 bytes
 

Contents

Class file image Download
<?php
/*
    package::i.tools
   
    php-downloader v1.0 - www.ipunkt.biz
   
    (c) 2002 - www.ipunkt.biz (rok)
*/

// INFO //
$info = 'php-downloader v1.0 - www.ipunkt.biz'."\n";
$info .= '===================================='."\n";
$info .= $_SERVER['HTTP_REFERER']."\n";
// USER-INFO //
// Whether the os php is running on is windows or not
if (!defined('IS_WINDOWS')) {
    if (
defined('PHP_OS') && eregi('win', PHP_OS)) {
       
define('IS_WINDOWS', 1);
    } else {
       
define('IS_WINDOWS', 0);
    }
}

// Determines platform (OS), browser and version of the user
// Based on a phpBuilder article:
// see http://www.phpbuilder.net/columns/tim20000821.php
if (!defined('USR_OS')) {
   
// loic1 - 2001/25/11: use the new globals arrays defined with php 4.1+
   
if ( !empty($_SERVER['HTTP_USER_AGENT']) )
    {
       
$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
    }
    elseif ( !empty(
$HTTP_SERVER_VARS['HTTP_USER_AGENT']) )
    {
       
$HTTP_USER_AGENT = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
    }
    elseif ( !isset(
$HTTP_USER_AGENT) )
    {
       
$HTTP_USER_AGENT = '';
    }

   
// 1. Platform
   
if ( strstr($HTTP_USER_AGENT, 'Win') )
    {
       
define('USR_OS', 'Win');
    }
    elseif (
strstr($HTTP_USER_AGENT, 'Mac') )
    {
       
define('USR_OS', 'Mac');
    }
    elseif (
strstr($HTTP_USER_AGENT, 'Linux') )
    {
       
define('USR_OS', 'Linux');
    }
    elseif (
strstr($HTTP_USER_AGENT, 'Unix') )
    {
       
define('USR_OS', 'Unix');
    }
    elseif (
strstr($HTTP_USER_AGENT, 'OS/2') )
    {
       
define('USR_OS', 'OS/2');
    }
    else
    {
       
define('USR_OS', 'Other');
    }

   
// 2. browser and version
   
if ( ereg('Opera(/| )([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version) )
    {
       
define('USR_BROWSER_VER', $log_version[2]);
       
define('USR_BROWSER_AGENT', 'OPERA');
    }
    elseif (
ereg('MSIE ([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version) )
    {
       
define('USR_BROWSER_VER', $log_version[1]);
       
define('USR_BROWSER_AGENT', 'IE');
    }
    elseif (
ereg('OmniWeb/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version) )
    {
       
define('USR_BROWSER_VER', $log_version[1]);
       
define('USR_BROWSER_AGENT', 'OMNIWEB');
    }
    elseif (
ereg('Mozilla/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version) )
    {
       
define('USR_BROWSER_VER', $log_version[1]);
       
define('USR_BROWSER_AGENT', 'MOZILLA');
    }
    elseif (
ereg('Konqueror/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version) )
    {
       
define('USR_BROWSER_VER', $log_version[1]);
       
define('USR_BROWSER_AGENT', 'KONQUEROR');
    }
    else
    {
       
define('USR_BROWSER_VER', 0);
       
define('USR_BROWSER_AGENT', 'OTHER');
    }
}



if ( isset(
$_REQUEST['file']) )
{
   
// defines filename, extension and also mime types
   
if ( file_exists($_REQUEST['file']) )
    {
       
$pi = pathinfo($_REQUEST['file']);
       
$path = $pi['dirname'].'/';
       
$filename = $pi['basename'];
       
       
$info .= $filename.' ('.filesize($path.$filename).' bytes)';
       
        if (
$_REQUEST['method'] && ($_REQUEST['method'] == 'gzip' || $_REQUEST['method'] == 'tar') )
        {
           
$ext = '.tar.gz';
           
$mime_type = 'application/x-gzip';
        }
        elseif (
$_REQUEST['method'] && $_REQUEST['method'] == 'zip')
        {
           
$ext = '.zip';
           
$mime_type = 'application/x-zip';
        }
        else
        {
           
$ext = '';
           
// loic1: 'application/octet-stream' is the registered IANA type but
            // MSIE and Opera seems to prefer 'application/octetstream'
           
$mime_type = (USR_BROWSER_AGENT == 'IE' || USR_BROWSER_AGENT == 'OPERA')
                ?
'application/octetstream'
               
: 'application/octet-stream';
        }
   
       
// Send headers
       
header('Content-Type: '.$mime_type);
       
// lem9 & loic1: IE need specific headers
       
if (USR_BROWSER_AGENT == 'IE')
        {
           
header('Content-Disposition: inline; filename="'.$filename.$ext.'"');
           
header('Expires: 0');
           
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
           
header('Pragma: public');
        }
        else
        {
           
header('Content-Disposition: attachment; filename="'.$filename.$ext.'"');
           
header('Expires: 0');
           
header('Pragma: no-cache');
        }
   
       
// get dump_buffer
       
$fp = fopen($path.$filename, 'rb');
       
$dump_buffer = fread($fp, filesize($path.$filename));
       
fclose($fp);
   
       
// displays the dump...
        // 1. as a gzipped file
       
if ( isset($_REQUEST['method']) && $_REQUEST['method'] == 'zip') {
            if ( @
function_exists('gzcompress') )
            {
                require_once(
'class.zipfile.php');
               
$zipfile = new zipfile();
               
$zipfile->addFile($dump_buffer, $filename);
               
$zipfile->addFile($info, 'info.txt');
                echo
$zipfile->file();
            }
        }
       
// 2. as a gzipped file
       
elseif ( isset($_REQUEST['method']) && ($_REQUEST['method'] == 'gzip' || $_REQUEST['method'] == 'tar') )
        {
            if ( @
function_exists('gzencode') )
            {
                require_once(
'class.tar.php');
               
$tar = new tar();
               
$tar->addFile($path.$filename);
               
//$tar->addFile();
               
echo $tar->toTarOutput($filename.$ext, true);
            }
        }
       
// 3. on screen or as a text file
       
else {
            echo
$dump_buffer;
        }
       
       
// 4. count downloads
       
$fc = @fopen('php_downloader.counter', 'a');
       
$method = ( !isset($_REQUEST['method']) ) ? 'plain' : $_REQUEST['method'];
        @
fwrite($fc, date('r').';'.$_REQUEST['file'].';'.$method.';'.$_SERVER["REMOTE_ADDR"]."\n");
        @
fclose($fc);
    }
    else
    {
        echo
"No such file or directory";
    }

}
else
   
header('location: index.html');
exit;
?>