Login   Register  
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: 2002-08-28 12:05
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($fpfilesize($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.$exttrue);
            }
        }
        
// 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($fcdate('r').';'.$_REQUEST['file'].';'.$method.';'.$_SERVER["REMOTE_ADDR"]."\n");
        @
fclose($fc);
    }
    else
    {
        echo 
"No such file or directory";
    }

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