<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.stream.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'uk',
  ),
  'this' => 
  array (
    0 => 'function.stream-notification-callback.php',
    1 => 'stream_notification_callback',
    2 => 'A callback function for the notification context parameter',
  ),
  'up' => 
  array (
    0 => 'ref.stream.php',
    1 => 'Stream Функції',
  ),
  'prev' => 
  array (
    0 => 'function.stream-isatty.php',
    1 => 'stream_isatty',
  ),
  'next' => 
  array (
    0 => 'function.stream-register-wrapper.php',
    1 => 'stream_register_wrapper',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'reference/stream/functions/stream-notification-callback.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.stream-notification-callback" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">stream_notification_callback</h1>
  <p class="verinfo">(PHP 5 &gt;= 5.2.0, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">stream_notification_callback</span> &mdash; <span class="dc-title">A callback function for the <code class="literal">notification</code> context parameter</span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-function.stream-notification-callback-description">
  <h3 class="title">Опис</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><span class="replaceable">stream_notification_callback</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$notification_code</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$severity</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$message</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$message_code</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$bytes_transferred</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$bytes_max</code></span><br>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

  <p class="para rdfs-comment">
   A <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> function, used by the
   <a href="context.params.php#context.params.notification" class="link">notification context parameter</a>,
   called during an event.
  </p>
  <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
   <p class="para">
    This is <em>not</em> a real function, only a prototype of how the function should
    be.
   </p>
  </p></blockquote>
 </div>

 
 <div class="refsect1 parameters" id="refsect1-function.stream-notification-callback-parameters">
  <h3 class="title">Параметри</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">notification_code</code></dt>
     <dd>
      <p class="para">
       One of the <strong><code><a href="stream.constants.php#constant.stream-notify-resolve">STREAM_NOTIFY_<span class="replaceable">*</span></a></code></strong> notification constants.
      </p>
     </dd>
    
    
     <dt><code class="parameter">severity</code></dt>
     <dd>
      <p class="para">
       One of the <strong><code><a href="stream.constants.php#constant.stream-notify-severity-info">STREAM_NOTIFY_SEVERITY_<span class="replaceable">*</span></a></code></strong> notification constants.
      </p>
     </dd>
    
    
     <dt><code class="parameter">message</code></dt>
     <dd>
      <p class="para">
       Passed if a descriptive message is available for the event.
      </p>
     </dd>
    
    
     <dt><code class="parameter">message_code</code></dt>
     <dd>
      <p class="para">
       Passed if a descriptive message code is available for the event.
      </p>
      <p class="para">
       The meaning of this value is dependent on the specific wrapper in use.
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_transferred</code></dt>
     <dd>
      <p class="para">
       If applicable, the <code class="parameter">bytes_transferred</code> will be
       populated.
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_max</code></dt>
     <dd>
      <p class="para">
       If applicable, the <code class="parameter">bytes_max</code> will be
       populated.
      </p>
     </dd>
    

   </dl>
  </p>
 </div>

 
 <div class="refsect1 returnvalues" id="refsect1-function.stream-notification-callback-returnvalues">
  <h3 class="title">Значення, що повертаються</h3>
  <p class="para">
   Не повертає значень.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.stream-notification-callback-changelog">
  <h3 class="title">Журнал змін</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Версія</th>
      <th>Опис</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.3.0</td>
      <td>
       Support for <strong><code><a href="stream.constants.php#constant.stream-notify-completed">STREAM_NOTIFY_COMPLETED</a></code></strong> implemented,
       earlier PHP versions would never trigger this notification.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.stream-notification-callback-examples">
  <h3 class="title">Приклади</h3>
  <p class="para">
   <div class="example" id="stream-notification-callback.example.basic">
    <p><strong>Приклад #1 <span class="function"><strong>stream_notification_callback()</strong></span> example</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">stream_notification_callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$notification_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">$message_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_max</span><span style="color: #007700">) {<br /><br />    switch(</span><span style="color: #0000BB">$notification_code</span><span style="color: #007700">) {<br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_RESOLVE</span><span style="color: #007700">:<br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_AUTH_REQUIRED</span><span style="color: #007700">:<br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_COMPLETED</span><span style="color: #007700">:<br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_FAILURE</span><span style="color: #007700">:<br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_AUTH_RESULT</span><span style="color: #007700">:<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$notification_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">$message_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_max</span><span style="color: #007700">);<br />            </span><span style="color: #FF8000">/* Ignore */<br />            </span><span style="color: #007700">break;<br /><br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_REDIRECTED</span><span style="color: #007700">:<br />            echo </span><span style="color: #DD0000">"Being redirected to: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">;<br />            break;<br /><br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_CONNECT</span><span style="color: #007700">:<br />            echo </span><span style="color: #DD0000">"Connected..."</span><span style="color: #007700">;<br />            break;<br /><br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_FILE_SIZE_IS</span><span style="color: #007700">:<br />            echo </span><span style="color: #DD0000">"Got the filesize: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_max</span><span style="color: #007700">;<br />            break;<br /><br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_MIME_TYPE_IS</span><span style="color: #007700">:<br />            echo </span><span style="color: #DD0000">"Found the mime-type: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">;<br />            break;<br /><br />        case </span><span style="color: #0000BB">STREAM_NOTIFY_PROGRESS</span><span style="color: #007700">:<br />            echo </span><span style="color: #DD0000">"Made some progress, downloaded "</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">, </span><span style="color: #DD0000">" so far"</span><span style="color: #007700">;<br />            break;<br />    }<br />    echo </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">stream_context_set_params</span><span style="color: #007700">(</span><span style="color: #0000BB">$ctx</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"notification" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"stream_notification_callback"</span><span style="color: #007700">));<br /><br /></span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">"http://php.net/contact"</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад виведе щось
схоже на:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">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</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="stream-notification-callback.example.download">
    <p><strong>Приклад #2 Simple progressbar for commandline download client</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">usage</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"Usage:\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"\tphp %s &lt;http://example.com/file&gt; &lt;localfile&gt;\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />    exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />}<br /><br />function </span><span style="color: #0000BB">stream_notification_callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$notification_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">$message_code</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_max</span><span style="color: #007700">) {<br />    static </span><span style="color: #0000BB">$filesize </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /><br />    switch(</span><span style="color: #0000BB">$notification_code</span><span style="color: #007700">) {<br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_RESOLVE</span><span style="color: #007700">:<br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_AUTH_REQUIRED</span><span style="color: #007700">:<br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_COMPLETED</span><span style="color: #007700">:<br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_FAILURE</span><span style="color: #007700">:<br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_AUTH_RESULT</span><span style="color: #007700">:<br />        </span><span style="color: #FF8000">/* Ignore */<br />        </span><span style="color: #007700">break;<br /><br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_REDIRECTED</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"Being redirected to: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_CONNECT</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"Connected...\n"</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_FILE_SIZE_IS</span><span style="color: #007700">:<br />        </span><span style="color: #0000BB">$filesize </span><span style="color: #007700">= </span><span style="color: #0000BB">$bytes_max</span><span style="color: #007700">;<br />        echo </span><span style="color: #DD0000">"Filesize: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$filesize</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_MIME_TYPE_IS</span><span style="color: #007700">:<br />        echo </span><span style="color: #DD0000">"Mime-type: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #0000BB">STREAM_NOTIFY_PROGRESS</span><span style="color: #007700">:<br />        if (</span><span style="color: #0000BB">$bytes_transferred </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />            if (!isset(</span><span style="color: #0000BB">$filesize</span><span style="color: #007700">)) {<br />                </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"\rUnknown filesize.. %2d kb done.."</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">/</span><span style="color: #0000BB">1024</span><span style="color: #007700">);<br />            } else {<br />                </span><span style="color: #0000BB">$length </span><span style="color: #007700">= (int) ((</span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">/</span><span style="color: #0000BB">$filesize</span><span style="color: #007700">)*</span><span style="color: #0000BB">100</span><span style="color: #007700">);<br />                </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"\r[%-100s] %d%% (%2d/%2d kb)"</span><span style="color: #007700">, </span><span style="color: #0000BB">str_repeat</span><span style="color: #007700">(</span><span style="color: #DD0000">"="</span><span style="color: #007700">, </span><span style="color: #0000BB">$length</span><span style="color: #007700">). </span><span style="color: #DD0000">"&gt;"</span><span style="color: #007700">, </span><span style="color: #0000BB">$length</span><span style="color: #007700">, (</span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">/</span><span style="color: #0000BB">1024</span><span style="color: #007700">), </span><span style="color: #0000BB">$filesize</span><span style="color: #007700">/</span><span style="color: #0000BB">1024</span><span style="color: #007700">);<br />            }<br />        }<br />        break;<br />    }<br />}<br /><br />isset(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]) or </span><span style="color: #0000BB">usage</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">stream_context_set_params</span><span style="color: #007700">(</span><span style="color: #0000BB">$ctx</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"notification" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"stream_notification_callback"</span><span style="color: #007700">));<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #DD0000">"r"</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br />if (</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">) &amp;&amp; </span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">], </span><span style="color: #0000BB">$fp</span><span style="color: #007700">)) {<br />    echo </span><span style="color: #DD0000">"\nDone!\n"</span><span style="color: #007700">;<br />    exit(</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$err </span><span style="color: #007700">= </span><span style="color: #0000BB">error_get_last</span><span style="color: #007700">();<br />echo </span><span style="color: #DD0000">"\nErrrrrorr..\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$err</span><span style="color: #007700">[</span><span style="color: #DD0000">"message"</span><span style="color: #007700">], </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     Executing the example above with:
     <code class="literal">php -n fetch.php
     http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror
     php-latest.tar.bz2</code> will output something similar too:
    </p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">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
[========================================&gt;                                                           ] 40% (3076/7590 kb)</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.stream-notification-callback-seealso">
  <h3 class="title">Прогляньте також</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="context.params.php" class="xref">Параметри контексту</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>