/usr/share/php/doc/HTTP_Request/docs/download-progress.php is in php-http-request 1.4.4-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | <?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.
*
* @category HTTP
* @package HTTP_Request
* @version CVS: $Id: download-progress.php,v 1.4 2007/10/26 13:45:56 avb Exp $
* @ignore
*/
/**
* Class for performing HTTP requests
*/
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);
/**
* A Listener for HTTP_Request that draws download progress indicator
*
* @category HTTP
* @package HTTP_Request
* @ignore
*/
class HTTP_Request_DownloadListener extends HTTP_Request_Listener
{
/**
* Handle for the target file
* @var int
*/
var $_fp;
/**
* Console_ProgressBar instance 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;
case 'connect':
case 'disconnect':
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);
?>
|