downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  

<stream_get_wrappersstream_register_wrapper>
Last updated: Thu, 26 Jun 2008

stream_notification_callback

(No version information available, might be only in CVS)

stream_notification_callback — A callback function for the notification context paramater

Description

void stream_notification_callback ( int $notification_code , int $severity , string $message , int $message_code , int $bytes_transferred , int $bytes_max )

A callback function called during an event.

Note: This is not a real function, only a prototype of how the function should be.

Parameters

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.

Return Values

No value is returned.

Examples

Example #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
"Conntected...";
           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);
?>

The above example will output something similar to:

Conntected...
Found the mime-type: text/html; charset=utf-8
Being redirected to: http://no.php.net/contact
Conntected...
Got the filesize: 0
Found the mime-type: text/html; charset=utf-8
Being redirected to: http://no.php.net/contact.php
Conntected...
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

Example #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
"Conntected...\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:

Conntected...
Mime-type: text/html; charset=utf-8
Being redirected to: http://no2.php.net/distributions/php-5.2.5.tar.bz2
Conntected...
Filesize: 7773024
Mime-type: application/octet-stream
[========================================>                                                           ] 40% (3076/7590 kb)



add a noteadd a note User Contributed Notes
A callback function for the notification context paramater
There are no user contributed notes for this page.




<stream_get_wrappersstream_register_wrapper>
Last updated: Thu, 26 Jun 2008
show source | credits | sitemap | contact | advertising | mirror sites
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: http://phpbuilder.com/
Last updated: Tue Nov 1 20:20:59 2005 EST
Columns / Articles | Tips / Quickies | News | News Linking and RSS Feeds | Shared Code Library
Mail Archives | Support / Discussion Forums | Get Started! Links | Contribute! | Docs