Avatar billede jps2mt Nybegynder
23. september 2004 - 18:34 Der er 1 kommentar og
1 løsning

Forskellig hastighed på download alt efter status?

Hej,

Er det muligt at lave en eller anden form for forskellig hastighed alt efter om en given bruger er VIP eller blot normal??

Jeg har en ide om at en normal bruger kun må kunne downloade filer fra sitet med f.eks. 5 Kb/s men VIP brugere må downloade med "fuld skrue"...

Jeg har en Apache WebServer og mod_bandwidth installeret, men kan ikke lige se hvordan jeg kan ændre på mod_bandwidth's indstillinger fra et PHP script...
Avatar billede coderdk Praktikant
24. september 2004 - 15:56 #1
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.exe

Den 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 );

?>
Avatar billede jps2mt Nybegynder
24. september 2004 - 17:54 #2
Det var da et totalt nice script det der, mange tak for det :)

Lidt modifikationer og så kan det nøjagtigt hvad jeg vil have det til :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester