Du kan tilpasse denne her, du skal bare sætte hvor du gemmer dine filer, og hvad download limit skal være. Gemmer du dine filer i /home/files/ f.eks.: /home/files/utils/winrar.exe downloader du filen ved at kalde dette script f.eks. med:
http://www.example.dk/download.php/utils/winrar.exeDen understøtter resume af downloads og har lidt sikkerhed indbygget.
<?php
set_time_limit( 0 );
define( 'DL_LIMIT_BANDWIDTH', 5 ); // In KB - 0 = No limit!
define( 'DL_DOWNLOAD_ROOT', '/home/files' ); // Set this to where you store your files!
$path = $_SERVER['PATH_INFO'];
header( "Pragma: " );
header( "Cache-Control: " );
header( "Expires: 0" );
if ( strlen( $path ) == 0 )
{
die('No download');
}
$file = realpath( DL_DOWNLOAD_ROOT . $path );
if ( !file_exists( $file ) )
{
// The file does not exist
header( 'HTTP/1.0 404 File Not Found' );
die( 'File not found' );
exit;
}
if ( substr( $file, 0, strlen( DL_DOWNLOAD_ROOT ) ) != DL_DOWNLOAD_ROOT )
{
// User attemted to download out of our path
die( 'No such download' );
exit;
}
$offset = false;
$endset = false;
if ( $_SERVER['HTTP_RANGE'] )
{
// User wants to resume download
if ( preg_match( '/^bytes=([0-9]*?)-$/', $_SERVER['HTTP_RANGE'], $regs ) )
{
$offset = $regs[1];
}
else if ( preg_match( '/^bytes=([0-9]*?)-([0-9]*?)$/', $_SERVER['HTTP_RANGE'], $regs ) )
{
$offset = $regs[1];
$endset = $regs[2];
}
}
$length = filesize( $file );
$fp = fopen( $file, 'rb' );
if ( $offset )
{
if ( $offset > $length )
{
// User requested to resume beyond file size!
header( 'HTTP/1.0 500 Internal Server Error' );
exit;
}
// Resume download from somewhere
fseek( $fp, $offset );
$length -= $offset;
if ( $endset )
{
$length = $endset-$offset;
}
}
$filename = basename( $file );
header( "Content-Length: $length" );
header( "Content-Type: application/x-msdownload" );
header( "X-Powered-By: ioflux.net download delivery system" );
header( "Content-disposition: attachment; filename=$filename" );
header( "Content-Transfer-Encoding: binary" );
header( "Accept-Ranges: bytes" );
if ( !$endset )
{
$endset = $length;
}
$cur = 0;
$start = time();
$len = ( ( $length - $cur ) > 4096 ? 4096 : ( $length - $cur ) );
while ( $cnt = fread( $fp, $len ) )
{
$cur += $len;
$len = ( ( $length - $cur ) > 4096 ? 4096 : ( $length - $cur ) );
echo $cnt;
$secs = time() - $start;
$Kbsec = ( ( $cur / $secs ) / 1000 );
if ( DL_LIMIT_BANDWIDTH != 0 && $Kbsec > DL_LIMIT_BANDWIDTH )
{
sleep( 1 );
}
if ( connection_aborted() )
{
// User cancelled the download...
exit;
}
}
fclose( $fp );
?>