PHP stream_notification_callback() Function
The PHP stream_notification_callback() function is a callable function, used by the notification context parameter, called during an event.
Note: This is not a real function, only a prototype of how the function should be.
Syntax
stream_notification_callback(notification_code, severity, message, message_code, bytes_transferred, bytes_max)
Parameters
notification_code |
Required. Specify one of the STREAM_NOTIFY_* notification constants. |
severity |
Required. Specify one of the STREAM_NOTIFY_SEVERITY_* notification constants. |
message |
Required. Passed if a descriptive message is available for the event. |
message_code |
Required. 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 |
Required. If applicable, the bytes_transferred will be populated. |
bytes_max |
Required. If applicable, the bytes_max will be populated. |
Return Value
No value is returned.
Example: stream_notification_callback() example
The example below shows the usage of stream_notification_callback() function.
<?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(); stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); file_get_contents("https://alphacodingskills.com/index", false, $ctx); ?>
The output of the above code will be similar to:
Connected... Got the filesize: 339 Found the mime-type: text/html; charset=iso-8859-1 Being redirected to: https://www.alphacodingskills.com/index.php Connected... 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 5273 so far Made some progress, downloaded 9657 so far Made some progress, downloaded 9659 so far Made some progress, downloaded 9665 so far Made some progress, downloaded 13965 so far Made some progress, downloaded 21207 so far Made some progress, downloaded 21209 so far Made some progress, downloaded 21884 so far
Example: simple progressbar for commandline download client
Consider the example below where this function is used while working with a 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(); stream_context_set_params($ctx, 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); ?>
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)
❮ PHP Streams Reference