PHP Classes

File: index.php

Recommend this page to a friend!
  Classes of Ahmed Saad   Advanced PHP File Downloader   index.php   Download  
File: index.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Advanced PHP File Downloader
Retrieve files for download from remote sites
Author: By
Last change: Update of index.php
Date: 1 year ago
Size: 7,120 bytes
 

Contents

Class file image Download
<?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;
?>