download-progress.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 114 行

PHP
114
字号
<?php/** * An example of Listener usage with HTTP_Request. This downloads and saves  * the file displaying the progress bar in the process. *  * Note two things: * 1) The file should be run in console, not in browser; * 2) You should turn output buffering OFF for this to work properly. *  * $Id: download-progress.php,v 1.1 2003/10/27 10:48:49 avb Exp $ */require_once 'HTTP/Request.php';require_once 'HTTP/Request/Listener.php';require_once 'Console/ProgressBar.php';PEAR::setErrorHandling(PEAR_ERROR_DIE);set_time_limit(0);class HTTP_Request_DownloadListener extends HTTP_Request_Listener{   /**    * Handle for the target file    * @var int    */    var $_fp;   /**    * Console_ProgressBar intance used to display the indicator    * @var object    */    var $_bar;   /**    * Name of the target file    * @var string    */    var $_target;   /**    * Number of bytes received so far    * @var int    */    var $_size = 0;    function HTTP_Request_DownloadListener()    {        $this->HTTP_Request_Listener();    }   /**    * Opens the target file    * @param string Target file name    * @throws PEAR_Error    */    function setTarget($target)    {        $this->_target = $target;        $this->_fp = @fopen($target, 'wb');        if (!$this->_fp) {            PEAR::raiseError("Cannot open '{$target}'");        }    }    function update(&$subject, $event, $data = null)    {        switch ($event) {            case 'sentRequest':                 $this->_target = basename($subject->_url->path);                break;            case 'gotHeaders':                if (isset($data['content-disposition']) &&                    preg_match('/filename="([^"]+)"/', $data['content-disposition'], $matches)) {                    $this->setTarget(basename($matches[1]));                } else {                    $this->setTarget($this->_target);                }                $this->_bar =& new Console_ProgressBar(                    '* ' . $this->_target . ' %fraction% KB [%bar%] %percent%', '=>', '-',                     79, (isset($data['content-length'])? round($data['content-length'] / 1024): 100)                );                $this->_size = 0;                break;            case 'tick':                $this->_size += strlen($data);                $this->_bar->update(round($this->_size / 1024));                fwrite($this->_fp, $data);                break;            case 'gotBody':                fclose($this->_fp);                break;            default:                PEAR::raiseError("Unhandled event '{$event}'");        } // switch    }}// Try using any other package if you like, but choose the bigger ones// to be able to see the progress bar$url = 'http://pear.php.net/get/HTML_QuickForm-stable';$req =& new HTTP_Request($url);$download =& new HTTP_Request_DownloadListener();$req->attach($download);$req->sendRequest(false);?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?