PHP Function Reference

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