<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'function.stream-notification-callback.php',
    1 => 'stream_notification_callback',
    2 => 'notification コンテキストパラメータ用のコールバック関数',
  ),
  'up' => 
  array (
    0 => 'ref.stream.php',
    1 => 'ストリーム 関数',
  ),
  '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' => 'ja',
    '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"><code class="literal">notification</code> コンテキストパラメータ用のコールバック関数</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">
   イベント発生時にコールされる <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> 関数です。
   <a href="context.params.php#context.params.notification" class="link">notification context parameter</a>
   が使用します。
  </p>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    これは実際の関数では <em>ありません</em>。
    コールバック関数がどうあるべきかというプロトタイプだけを示すものです。
   </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">
       <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">
       <strong><code>STREAM_NOTIFY_SEVERITY_*</code></strong> 通知定数のひとつ。
      </p>
     </dd>
    
    
     <dt><code class="parameter">message</code></dt>
     <dd>
      <p class="para">
       イベントについて説明するメッセージが存在する場合に渡されます。
      </p>
     </dd>
    
    
     <dt><code class="parameter">message_code</code></dt>
     <dd>
      <p class="para">
       イベントについて説明するコードが存在する場合に渡されます。
      </p>
      <p class="para">
       この値の意味は、使用するラッパーによって異なります。
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_transferred</code></dt>
     <dd>
      <p class="para">
       利用可能な場合は <code class="parameter">bytes_transferred</code>
       の値が格納されます。
      </p>
     </dd>
    
    
     <dt><code class="parameter">bytes_max</code></dt>
     <dd>
      <p class="para">
       利用可能な場合は <code class="parameter">bytes_max</code>
       の値が格納されます。
      </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>
       <strong><code><a href="stream.constants.php#constant.stream-notify-completed">STREAM_NOTIFY_COMPLETED</a></code></strong> のサポートが実装されました。
       これより前のバージョンでは、PHP はこの通知を決して発生させませんでした。
      </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> の例</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">/* 無視 */<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 コマンドラインのダウンロードツール用のシンプルなプログレスバー</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">/* 無視 */<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>
     上の例を
     <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> のように実行すると、次のような出力となります。
    </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); ?>