stream_notification_callback
(PHP 5 >= 5.2.0) stream_notification_callback — A callback function for the notification context paramater
Описание
void stream_notification_callback
( int $notification_code
, int $severity
, string $message
, int $message_code
, int $bytes_transferred
, int $bytes_max
)
Замечание:
This is not a real function, only a prototype of how the function should
be.
Список параметров
-
notification_code
-
One of the STREAM_NOTIFY_* notification constants.
-
severity
-
One of the STREAM_NOTIFY_SEVERITY_* notification constants.
-
message
-
Passed if a descriptive message is available for the event.
-
message_code
-
Passed if a descriptive message code is available for the event.
The meaning of this value is dependent on the specific wrapper in use.
-
bytes_transferred
-
If applicable, the bytes_transferred
will be
populated.
-
bytes_max
-
If applicable, the bytes_max
will be
populated.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Примеры
Пример #1 stream_notification_callback() example
<?php function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
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: var_dump($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max); /* Ignore */ break;
case STREAM_NOTIFY_REDIRECTED: echo "Being redirected to: ", $message; break;
case STREAM_NOTIFY_CONNECT: echo "Connected..."; break;
case STREAM_NOTIFY_FILE_SIZE_IS: echo "Got the filesize: ", $bytes_max; break;
case STREAM_NOTIFY_MIME_TYPE_IS: echo "Found the mime-type: ", $message; break;
case STREAM_NOTIFY_PROGRESS: echo "Made some progress, downloaded ", $bytes_transferred, " so far"; break; } echo "\n"; }
$ctx = stream_context_create(null, array("notification" => "stream_notification_callback"));
file_get_contents("http://php.net/contact", false, $ctx); ?>
Результатом выполнения данного примера
будет что-то подобное:
Connected...
Found the mime-type: text/html; charset=utf-8
Being redirected to: http://no.php.net/contact
Connected...
Got the filesize: 0
Found the mime-type: text/html; charset=utf-8
Being redirected to: http://no.php.net/contact.php
Connected...
Got the filesize: 4589
Found the mime-type: text/html;charset=utf-8
Made some progress, downloaded 0 so far
Made some progress, downloaded 0 so far
Made some progress, downloaded 0 so far
Made some progress, downloaded 1440 so far
Made some progress, downloaded 2880 so far
Made some progress, downloaded 4320 so far
Made some progress, downloaded 5760 so far
Made some progress, downloaded 6381 so far
Made some progress, downloaded 7002 so far
Пример #2 Simple progressbar for commandline download client
<?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);
$ctx = stream_context_create(null, 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 "\nErrrrrorr..\n", $err["message"], "\n"; exit(1); ?>
Executing the example above with:
php -n fetch.php
http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror
php-latest.tar.bz2 will output something similar too:
Connected...
Mime-type: text/html; charset=utf-8
Being redirected to: http://no2.php.net/distributions/php-5.2.5.tar.bz2
Connected...
Filesize: 7773024
Mime-type: application/octet-stream
[========================================> ] 40% (3076/7590 kb)
|
|