تابع دانلود در php
#1
Note 
کد php:
function force_download($filename ''$data false$enable_partial true$speedlimit 0)
    {
    if (
$filename == '')
    {
    return 
FALSE;
    }
     
    if(
$data === false && !file_exists($filename))
    return 
FALSE;
     
    
// Try to determine if the filename includes a file extension.
    // We need it in order to set the MIME type
    
if (FALSE === strpos($filename'.'))
    {
    return 
FALSE;
    }
     
    
// Grab the file extension
    
$x explode('.'$filename);
    
$extension end($x);
     
    
// Load the mime types
    
@include(APPPATH.'config/mimes'.EXT);
     
    
// Set a default mime if we can't find it
    
if ( ! isset($mimes[$extension]))
    {
    if (
ereg('Opera(/| )([0-9].[0-9]{1,2})'$_SERVER['HTTP_USER_AGENT']))
    
$UserBrowser "Opera";
    elseif (
ereg('MSIE ([0-9].[0-9]{1,2})'$_SERVER['HTTP_USER_AGENT']))
    
$UserBrowser "IE";
    else
    
$UserBrowser '';
     
    
$mime = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' 'application/octet-stream';
    }
    else
    {
    
$mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
    }
     
    
$size $data === false filesize($filename) : strlen($data);
     
    if(
$data === false)
    {
    
$info pathinfo($filename);
    
$name $info['basename'];
    }
    else
    {
    
$name $filename;
    }
     
    
// Clean data in cache if exists
    
@ob_end_clean();
     
    
// Check for partial download
    
if(isset($_SERVER['HTTP_RANGE']) && $enable_partial)
    {
    list(
$a$range) = explode("="$_SERVER['HTTP_RANGE']);
    list(
$fbyte$lbyte) = explode("-"$range);
     
    if(!
$lbyte)
    
$lbyte $size 1;
     
    
$new_length $lbyte $fbyte;
     
    
header("HTTP/1.1 206 Partial Content"true);
    
header("Content-Length: $new_length"true);
    
header("Content-Range: bytes $fbyte-$lbyte/$size"true);
    }
    else
    {
    
header("Content-Length: " $size);
    }
     
    
// Common headers
    
header('Content-Type: ' $mimetrue);
    
header('Content-Disposition: attachment; filename="' $name '"'true);
    
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"true);
    
header('Accept-Ranges: bytes'true);
    
header("Cache-control: private"true);
    
header('Pragma: private'true);
     
    
// Open file
    
if($data === false) {
    
$file fopen($filename'r');
     
    if(!
$file)
    return 
FALSE;
    }
     
    
// Cut data for partial download
    
if(isset($_SERVER['HTTP_RANGE']) && $enable_partial)
    if(
$data === false)
    
fseek($file$range);
    else
    
$data substr($data$range);
     
    
// Disable script time limit
    
@set_time_limit(0);
     
    
// Check for speed limit or file optimize
    
if($speedlimit || $data === false)
    {
    if(
$data === false)
    {
    
$chunksize $speedlimit $speedlimit 1024 512 1024;
     
    while(!
feof($file) and (connection_status() == 0))
    {
    
$buffer fread($file$chunksize);
    echo 
$buffer;
    
flush();
     
    if(
$speedlimit 0)
    
sleep(1);
    }
     
    
fclose($file);
    }
    else
    {
    
$index 0;
    
$speedlimit *= 1024//convert to kb
     
    
while($index $size and (connection_status() == 0))
    {
    
$left $size $index;
    
$buffersize min($left$speedlimit);
     
    
$buffer substr($data$index$buffersize);
    
$index += $buffersize;
     
    echo 
$buffer;
    
flush();
    
sleep(1);
    }
    }
    }
    else
    {
    echo 
$data;
    }
    } 

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان