02/10/2018, 18:07

Giới hạn tốc độ download bằng php

Giới hạn tốc độ download bằng php <?php /** * Download with limited speed class file. * * i-php group : <http://i-php.net/> * Copyright (c) <2008>, <i-php.net> * Licensed under New BSD License * @filesource download_limited.php * ...

Giới hạn tốc độ download bằng php

<?php 
/** 
* Download with limited speed class file. 

* i-php group :   <http://i-php.net/> 
* Copyright (c) <2008>, <i-php.net> 
* Licensed under New BSD License 
* @filesource download_limited.php 
* @copyright       Copyright 2008, i-php group 
* @author                      habogay@gmail.com 
* @link            http://i-php.net/about/ 
* @since           php 5.0 
* @version         $Revision: 1 $ 
* @modifiedby      $LastChangedBy: habogay $ 
* @lastmodified    $Date: 2008-08-18 09:45:49 -0500 (Sat, 18 Oct 2008) $ 
* @license         http://www.freebsd.org/copyright/freebsd-license.html New BSD Style License 
*/ 

class DownloadLimited 
{        
        /** 
         * Send the local file to client with limit download rate as user view file name 
         * 
         * @param  string $localFile file to send 
         * @param  string $userViewFileName filename client will see 
         * @param  float  $downloadRate download limit speed in kb/s (ex: 50 kb/s)
         * @return no return 
         */ 
        function sendFile($localFile,$userViewFileName,$downloadRate) 
        { 
                /** check file exists 
                 * @see file_exists 
                */ 
                if(!file_exists($localFile)) 
                { 
                        throw new Exception('File not found execption file :'.$localFile.' not found'); 
                }        
                /** check file is file 
                 * @see is_file 
                */ 
                if(!is_file($localFile)) 
                { 
                        throw new Exception($localFile.' not is a file'); 
                } 
                if(!is_readable($localFile)) 
                { 
                        throw new Exception('file '.$localFile.' not readable '); 
                } 
                // send headers 
                header('Cache-control: private'); 
                header('Content-Type: application/octet-stream'); 
                header('Content-Length: '.filesize($localFile)); 
                header('Content-Disposition: filename='.$userViewFileName); 

                // flush header content 
                flush(); 
                // open file stream 
                $file = fopen($localFile, "r"); 
                while(!feof($file)) 
                { 

                        // send the current file part to the browser 
                        print fread($file, round($downloadRate * 1024)); 

                        // !important flush the content to the browser 
                        flush(); 

                        // !important sleep one second 
                        sleep(1); 
                } 

                // close file stream 
                fclose($file); 
                         

        } 
        /** 
         * Send the string data to client with limit download rate as user view file name 
         * 
         * @param  string string data  to send include ascii,utf-8 character 
         * @param  string $userViewFileName filename client will see 
         * @param  float  $downloadRate download limit speed in kb/s (ex: 50 kb/s)
         * @return no return 
         */ 
        function sendString($data,$userViewFileName,$downloadRate) 
        { 
                // send headers 
                header('Cache-control: private'); 
                header('Content-Type: application/octet-stream'); 
                header('Content-Length: '.strlen($data)); 
                header('Content-Disposition: filename='.$userViewFileName); 
                // flush header content 
                flush(); 
                
                $start=0; 
                $sendSize=0; 
                while($sendSize<strlen($data)) 
                { 
                        $sendSize=round($downloadRate*1024); 
                        print substr($data,$start,$sendSize); 
                        $start=$sendSize; 
                        // !important flush the content to the browser 
                        flush(); 

                        // !important sleep one second 
                        sleep(1); 
                } 
        } 
        

?>
Bình luận
0