diff options
Diffstat (limited to 'pear/fetch.php')
-rw-r--r-- | pear/fetch.php | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/pear/fetch.php b/pear/fetch.php new file mode 100644 index 0000000..01d2233 --- /dev/null +++ b/pear/fetch.php @@ -0,0 +1,76 @@ +<?php + +function usage($argv) { + echo "Usage:\n"; + printf("\tphp %s <http://example.com/file> <localfile>\n", $argv[0]); + exit(1); +} + +function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) { + static $filesize = null; + + switch($notification_code) { + case STREAM_NOTIFY_RESOLVE: + case STREAM_NOTIFY_AUTH_REQUIRED: + case STREAM_NOTIFY_COMPLETED: + case STREAM_NOTIFY_FAILURE: + case STREAM_NOTIFY_AUTH_RESULT: + /* Ignore */ + break; + + case STREAM_NOTIFY_REDIRECTED: + echo "Being redirected to: ", $message, "\n"; + break; + + case STREAM_NOTIFY_CONNECT: + echo "Connected...\n"; + break; + + case STREAM_NOTIFY_FILE_SIZE_IS: + $filesize = $bytes_max; + echo "Filesize: ", $filesize, "\n"; + break; + + case STREAM_NOTIFY_MIME_TYPE_IS: + echo "Mime-type: ", $message, "\n"; + break; + + case STREAM_NOTIFY_PROGRESS: + if ($bytes_transferred > 0) { + if (!isset($filesize)) { + printf("\rUnknown filesize.. %2d kb done..", $bytes_transferred/1024); + } else { + $length = (int)(($bytes_transferred/$filesize)*100); + printf("\r[%-100s] %d%% (%2d/%2d kb)", str_repeat("=", $length). ">", $length, ($bytes_transferred/1024), $filesize/1024); + } + } + break; + } +} + +isset($argv[1], $argv[2]) or usage($argv); + +if (!isset($_ENV['http_proxy'])) { + $copt = null; +} else { + $copt = array( + 'http' => array( + 'proxy' => preg_replace('/^http/i', 'tcp', $_ENV['http_proxy']), + 'request_fulluri' => true, + ), + ); +} + +$ctx = stream_context_create($copt, array("notification" => "stream_notification_callback")); + +$fp = fopen($argv[1], "r", false, $ctx); +if (is_resource($fp) && file_put_contents($argv[2], $fp)) { + echo "\nDone!\n"; + exit(0); +} + +$err = error_get_last(); +echo "\nError..\n", $err["message"], "\n"; +exit(1); + + |