📄 function.stream-notification-callback.html
字号:
<dt> <span class="term"><i><tt class="parameter">bytes_max</tt></i></span> <dd> <p class="para"> If applicable, the <i><tt class="parameter">bytes_max</tt></i> will be populated. </p> </dd> </dt> </dl> </p> </div> <div class="refsect1 returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> No value is returned. </p> </div> <div class="refsect1 examples"> <h3 class="title">Examples</h3> <p class="para"> <div class="example" id="stream-notification-callback.example.basic" name="stream-notification-callback.example.basic"> <p><b>Example #1 <b>stream_notification_callback()</b> example</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?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">"Conntected..."</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">(</span><span style="color: #0000BB">null</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"notification" </span><span style="color: #007700">=> </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">?></span></span></code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents"><pre><div class="cdata"><pre>Conntected...Found the mime-type: text/html; charset=utf-8Being redirected to: http://no.php.net/contactConntected...Got the filesize: 0Found the mime-type: text/html; charset=utf-8Being redirected to: http://no.php.net/contact.phpConntected...Got the filesize: 4589Found the mime-type: text/html;charset=utf-8Made some progress, downloaded 0 so farMade some progress, downloaded 0 so farMade some progress, downloaded 0 so farMade some progress, downloaded 1440 so farMade some progress, downloaded 2880 so farMade some progress, downloaded 4320 so farMade some progress, downloaded 5760 so farMade some progress, downloaded 6381 so farMade some progress, downloaded 7002 so far</pre></div> </pre></div> </div> </p> <p class="para"> <div class="example" id="stream-notification-callback.example.download" name="stream-notification-callback.example.download"> <p><b>Example #2 Simple progressbar for commandline download client</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?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 <http://example.com/file> <localfile>\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">"Conntected...\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">> </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">">"</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">(</span><span style="color: #0000BB">null</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"notification" </span><span style="color: #007700">=> </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">) && </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">?></span></span></code></div> </div> <div class="example-contents"><p> Executing the example above with: <i>php -n fetch.php http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror php-latest.tar.bz2</i> will output something similar too: </p></div> <div class="example-contents"><pre><div class="cdata"><pre>Conntected...Mime-type: text/html; charset=utf-8Being redirected to: http://no2.php.net/distributions/php-5.2.5.tar.bz2Conntected...Filesize: 7773024Mime-type: application/octet-stream[========================================> ] 40% (3076/7590 kb)</pre></div> </pre></div> </div> </p> </div> <div class="refsect1 seealso"> <h3 class="title">See Also</h3> <p class="para"> <ul class="simplelist"> <li class="member"><a href="context.params.html" class="xref">Context parameters</a></li> </ul> </p> </div></div><hr /><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="function.stream-get-wrappers.html">stream_get_wrappers</a></div> <div class="next" style="text-align: right; float: right;"><a href="function.stream-register-wrapper.html">stream_register_wrapper</a></div> <div class="up"><a href="ref.stream.html">Stream Functions</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -