<?php 
 
    require( './core/autoload.php' ); 
 
    use Core\Downloader as Downloader; 
     
     
    ini_set( 'display_errors', 1 ); 
 
    error_reporting( E_ALL ); 
     
    if( isset( $_POST[ 'download' ] ) ): 
     
 
        $file = is_file( './files/' . @$_POST[ 'file' ] ) ? 
            './files/' . @$_POST[ 'file' ]  // Download a file 
            : 
            @$_POST[ 'file' ];  // Download string, not prepend files folder path 
 
         
        $save_as = !@$_POST['save_name'] ?: $_POST['save_name']; 
         
        $resumable = ( bool ) @$_POST['resumable']; 
         
        $speed = intval( @$_POST[ 'speed' ] ); 
 
        $mode = @$_POST['mode'] == 'data' ? Downloader::DOWNLOAD_DATA : Downloader::DOWNLOAD_FILE; 
         
        $auth_username = @$_POST[ 'auth_username' ]; 
        $auth_password = @$_POST[ 'auth_password' ]; 
 
        $record = strlen( @$_POST[ 'record' ] ) > 1 ? 'recordBytesCallback' : ( int ) @$_POST[ 'record' ]; 
         
        $auto_exit = ( bool ) @$_POST['auto_exit']; 
 
        // var_dump( $record ); 
        // exit(); 
 
        // Authentication Callback 
        function authCallback( $php_user, $php_password ) 
        { 
            return ( $php_user === 'login_user' && $php_password === 'login_password' ) ? true : false; 
        } 
 
 
        // Download Recorder Callback 
        function recordBytesCallback( $bytes, $file_name ) 
        { 
            $path = './bytes.txt'; 
 
            $file = fopen( $path, 'a+t' ); 
 
            fwrite( $file, $file_name . '   |   ' . $bytes . " Bytes \n\r" ); 
 
            fclose( $file ); 
             
            // file_put_contents( '', $file_name . '    |   ' . $bytes ); 
        } 
 
         
        // Start Download 
        $downloader = ( new Downloader( $file, $mode ) ) 
            ->resumable( $resumable ) 
            ->speedLimit( $speed ) 
            ->setDownloadName( $save_as ) 
            ->autoExit( true ) 
            // ->authenticate( 'authCallback' ) 
            ->recordDownloaded( $record ); 
 
         
        if( $auth_username && $auth_password ) 
 
            $downloader->authenticate( $auth_username, $auth_password ); 
 
         
        // Start Download 
        $downloader->download(); 
 
 
     
    else: ?> 
 
    <!DOCTYPE html> 
    <html> 
        <head> 
            <title>Test Downloader Class @Ahmed Saad</title> 
            <meta charset="utf-8" /> 
            <meta name="author" content="Ahmed Saad" /> 
             
            <style> 
 
                body{ 
                    /*text-align: center;*/ 
                    color: #666; 
                } 
 
                form{ 
                    width: 400px; 
                    margin: 30px auto; 
                     
                } 
 
                form fieldset{ 
                    border: 1px solid #999; 
                    border-radius: 0 3px 3px 3px; 
                    padding: 25px 14px; 
                    margin-bottom: 20px; 
                } 
 
                form legend{ 
                    border: 1px solid #999; 
                    border-bottom: none; 
                    border-radius: 3px 3px 0 0; 
                    position: relative; 
                    left: 2px; 
                    bottom: -1px; 
                    padding: 5px 10px; 
                     
                } 
 
                form fieldset, form legend{ 
                    background: #fcfcfc; 
                } 
 
                input[type="text"]{ 
                    width: 250px; 
                    border-radius: 4px; 
                    border: 1px solid #999; 
                    outline: none; 
                     
                } 
 
                input[type="text"]:focus{ 
                    box-shadow: 1px 1px 4px #6ae inset, -1px -1px 1px #6ae inset; 
                    border-color: #6af; 
                } 
 
                input[type="submit"] 
                { 
                    /*padding: 4px;*/ 
                    border-radius: 4px; 
                    border: 1px solid rgb( 80, 150, 240 ); 
                    /*background: rgb( 100,170,230 );*/ 
                    background: -webkit-linear-gradient( rgb( 100,170,240 ) 0, rgb( 54,150,230 ) 100% ); 
                    color: rgb( 250, 250, 250 ); 
                    cursor: pointer; 
                } 
 
                input[type="submit"]:hover{ 
                    border-color: rgb( 10, 150, 240 ); 
                } 
 
                input{ 
                    line-height: 15px; 
                    padding: 5px; 
                } 
 
                .files{ 
                    border-top: 1px dashed #999; 
                    margin-top: 20px; 
                } 
 
                .files li{ 
                    color: rgb( 230, 100, 130 ); 
                } 
 
                form label:not([for*="mode"]):not([for*="record"]) 
                { 
                    display:inline-block; 
                    width: 100px; 
                } 
 
                form label[for*="mode"] + input, form label[for*="record"] + input 
                { 
                    margin-right: 30px; 
                } 
 
 
                input[name="download"]{ 
                    display: block; 
                    margin: 0 auto; 
                } 
 
                fieldset h4 
                { 
                    margin: 0 auto; 
                    text-align: center; 
                    color: rgb( 230, 100, 130 ); 
                } 
 
                #auth_username, #auth_password{ 
                    width: 117px; 
                } 
 
 
            </style> 
        </head> 
        <body> 
 
            <div class="container"> 
 
                <?php 
 
                if( $file = @$_GET['file'] ): 
                ?> 
 
                <!-- Prepare Sellected File --> 
                <form method="POST"> 
                     
                    <legend>Sellect Download Options</legend> 
                     
                    <fieldset> 
                         
                        <h4><?= $file ?></h4> 
 
                        <!-- Hidden File Name --> 
                        <input type="hidden" name="file" value="<?= $file ?>" /> 
 
                        <!-- Save Name --> 
                        <p> 
                            <label for="save_name">Save As</label> 
                            <input type="text" name="save_name" id="save_name" value="<?= $file ?>"> 
                        </p> 
 
                        <!-- Use Resume --> 
                        <p> 
                            <label for="resumable">Use Resume</label> 
                            <input type="checkbox" name="resumable" id="resumable" checked> 
                        </p> 
 
                        <!-- Speed Limit --> 
                        <p> 
                            <label for="speed">Speed</label> 
                            <input type="text" name="speed" id="speed" placeholder="Unlimited 'use integers kBps'" value=""> 
                        </p> 
 
                        <!-- Download Mode --> 
                        <p> 
                            <label>Mode</label> 
                            <label for="file_mode">File</label> 
                            <input type="radio" name="mode" id="file_mode" value="file" checked> 
                             
                            <label for="data_mode">Data</label> 
                            <input type="radio" name="mode" id="data_mode" value="data"> 
 
                        </p> 
 
                        <!-- Authenticate --> 
                        <p> 
                            <label>Authentication</label> 
                            <input type="text" name="auth_username" id="auth_username" placeholder="username"> 
                            <input type="text" name="auth_password" id="auth_password" placeholder="password"> 
                        </p> 
 
                        <!-- Record Downloaded Bytes --> 
                        <p> 
                            <label>Record Bytes</label> 
                             
                            <label for="record_0">No</label> 
                            <input type="radio" name="record" id="record_0" value="0" checked> 
                             
                            <label for="record_1">Yes</label> 
                            <input type="radio" name="record" id="record_1" value="1"> 
 
                            <label for="record_callback">Callback</label> 
                            <input type="radio" name="record" id="record_callback" value="callback"> 
                        </p> 
 
                        <!-- Auto Exit --> 
                        <p> 
                            <label for="auto_exit">Auto Exit</label> 
                            <input type="checkbox" name="auto_exit" id="auto_exit"> 
                        </p> 
 
                        <!-- Download --> 
                        <input type="submit" name="download" value="Download" /> 
 
                    </fieldset> 
 
                </form> 
 
 
                <? 
                else:// Display Form To Enter File Name 
                // get $files 
                $files = scandir( './files/' ); 
                 
                foreach( $files as $key => &$file ) 
                { 
                    $file_type = @pathinfo( $file )['extension']; 
 
                    $ignore = []; // [ 'php' => 1, 'html' => 1 ]; 
 
                    if( !is_file( './files/' . $file ) || strpos( $file, '.DS' ) === 0 || @$ignore[ $file_type ] ) 
                    { 
                        unset( $files[ $key ] ); 
                    } 
                } 
 
                ?> 
 
                <form method="GET"> 
                     
                    <legend>Type File Name To Download</legend> 
                    <fieldset> 
 
                        <input type="text" name="file" placeholder="filename..." validate /> 
 
                        <input type="submit" value="Prepare" /> 
 
                        <div class="files"> 
                            <h4>existing files</h4> 
                             
                            <?php 
                                if( $files ) 
 
                                    echo '<ul><li>' . implode( '</li><li>', $files ) . '</li></ul>'; 
 
                                else 
 
                                    echo '<h5>No Files Found</h5>'; 
                            ?> 
 
                        </div> 
 
                    </fieldset> 
 
 
                </form> 
 
            <?php endif; ?> 
                 
            </div> 
 
        </body> 
    </html> 
 
    <? endif; 
?>
 
 |