<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.stream-notification-callback.php',
    1 => 'stream_notification_callback',
    2 => 'Una funci&oacute;n de retrollamada para el par&aacute;metro de contexto notification',
  ),
  'up' => 
  array (
    0 => 'ref.stream.php',
    1 => 'Funciones de Flujos',
  ),
  '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' => 'es',
    '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">Una función de retrollamada para el parámetro de contexto <code class="literal">notification</code></span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.stream-notification-callback-description">
  <h3 class="title">Descripción</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">
   Una función de retrollamada de tipo <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>, utilizada por el
   <a href="context.params.php#context.params.notification" class="link">parámetro de contexto notification</a>,
   llamada durante un evento.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Esto <em>no</em> es una función real, únicamente un prototipo de
    cómo debe ser la función.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.stream-notification-callback-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">notification_code</code></dt>
     <dd>
      <p class="para">
       Una de las constantes de notificación <strong><code><a href="stream.constants.php#constant.stream-notify-resolve">STREAM_NOTIFY_<span class="replaceable">*</span></a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">severity</code></dt>
     <dd>
      <p class="para">
       Una de las constantes de notificación <strong><code><a href="stream.constants.php#constant.stream-notify-severity-info">STREAM_NOTIFY_SEVERITY_<span class="replaceable">*</span></a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">message</code></dt>
     <dd>
      <p class="para">
       Pasado si un mensaje descriptivo está disponible para este evento.
      </p>
     </dd>
    
    
     <dt><code class="parameter">message_code</code></dt>
     <dd>
      <p class="para">
       Pasado si un código de mensaje descriptivo está disponible para este evento.
      </p>
      <p class="para">
       El significado de este valor depende del gestor específico utilizado.
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_transferred</code></dt>
     <dd>
      <p class="para">
       Si es posible, <code class="parameter">bytes_transferred</code> será rellenado.
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_max</code></dt>
     <dd>
      <p class="para">
       Si es posible, <code class="parameter">bytes_max</code> será rellenado.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.stream-notification-callback-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   No se retorna ningún valor.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.stream-notification-callback-changelog">
  <h3 class="title">Historial de cambios</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Versión</th>
      <th>Descripción</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.3.0</td>
      <td>
       Soporte para <strong><code><a href="stream.constants.php#constant.stream-notify-completed">STREAM_NOTIFY_COMPLETED</a></code></strong> implementado,
       las versiones anteriores de PHP nunca desencadenaban esta notificación.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.stream-notification-callback-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="stream-notification-callback.example.basic">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>stream_notification_callback()</strong></span></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">/* Ignorar */<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">"Redirección a: "</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">"Conectado..."</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">"Obteniendo el tamaño del fichero: "</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">"Tipo mime encontrado: "</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">"Descargando, ya "</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes_transferred</span><span style="color: #007700">, </span><span style="color: #DD0000">" bytes transferidos"</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>Resultado del ejemplo anterior es similar a:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Conectado...
Tipo mime encontrado: text/html; charset=utf-8
Redirección a: http://no.php.net/contact
Conectado...
Obteniendo el tamaño del fichero: 0
Tipo mime encontrado: text/html; charset=utf-8
Redirección a: http://no.php.net/contact.php
Conectado...
Obteniendo el tamaño del fichero: 4589
Tipo mime encontrado: text/html;charset=utf-8
Descargando, ya 0 bytes transferidos
Descargando, ya 0 bytes transferidos
Descargando, ya 0 bytes transferidos
Descargando, ya 1440 bytes transferidos
Descargando, ya 2880 bytes transferidos
Descargando, ya 4320 bytes transferidos
Descargando, ya 5760 bytes transferidos
Descargando, ya 6381 bytes transferidos
Descargando, ya 7002 bytes transferidos</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="stream-notification-callback.example.download">
    <p><strong>Ejemplo #2 Barra de progreso simple para un cliente de descarga en línea de comandos</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">"Uso:\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">/* Ignorar */<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">"Redirección a: "</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">"Conectado...\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">"Tamaño del fichero: "</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">"Tipo Mime: "</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">"\rTamaño del fichero desconocido.. %2d kb hechos.."</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">"\n¡Hecho!\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">"\n¡Error!\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>
     Ejecute el ejemplo anterior con:
     <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> mostrará algo similar a:
    </p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Conectado...
Tipo Mime: text/html; charset=utf-8
Redirección a: http://no2.php.net/distributions/php-5.2.5.tar.bz2
Conectado...
Tamaño del fichero: 7773024
Tipo Mime: 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">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="context.params.php" class="xref">Contexto par&aacute;metros</a></li>
   </ul>
  </p>
 </div>


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