PHP.mk документација

stream_notification_callback

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.stream-notification-callback.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.stream-notification-callback.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
stream_notification_callback

Референца за `function.stream-notification-callback.php` со подобрена типографија и навигација.

function.stream-notification-callback.php

stream_notification_callback

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

stream_notification_callbackA callback function for the notification Колбек функција за

= NULL

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

А callable параметарот за контекст функција, што се користи одпараметарот за контекст на известување

Забелешка:

, повикана за време на настан. not Ова е

Параметри

notification_code

вистинска функција, само прототип за тоа како треба да биде функцијата. STREAM_NOTIFY_* Еден од

severity

вистинска функција, само прототип за тоа како треба да биде функцијата. STREAM_NOTIFY_SEVERITY_* Еден од

message

константите за известување.

message_code

Поминато ако е достапна описна порака за настанот.

Поминато ако е достапен код за описна порака за настанот.

bytes_transferred

Значењето на оваа вредност зависи од специфичниот обвивач што се користи. bytes_transferred Ако е применливо,

bytes_max

Значењето на оваа вредност зависи од специфичниот обвивач што се користи. bytes_max Ако е применливо,

Вратени вредности

Не се враќа вредност.

Дневник на промени

Верзија = NULL
8.3.0 Поддршка за STREAM_NOTIFY_COMPLETED ќе биде пополнето.

Примери

Пример #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
"Connected...";
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();
stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));

file_get_contents("http://php.net/contact", false, $ctx);
?>

Горниот пример ќе прикаже нешто слично на:

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

имплементирано, поранешните PHP верзии никогаш не би го активирале ова известување.

<?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
"Connected...\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();
stream_context_set_params($ctx, 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);
?>

Пример #2 Едноставен прогрес бар за клиент за преземање од командна линија php -n fetch.php http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror php-latest.tar.bz2 Извршување на горниот пример со:

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
[========================================>                                                           ] 40% (3076/7590 kb)

Види Исто така

Белешки од корисници 2 забелешки

billynoah на gmail точка ком
пред 8 години
A couple of notes regarding the examples here (I'm using PHP 7.0.18):

1) fopen() did not provide STREAM_NOTIFY_PROGRESS for me but `file_get_contents()` worked fine.

2) The bytes transferred when transferring a zip file seems to always be shy by 8192 (8k).  This varies depending on filetype and also breaks STREAM_NOTIFY_PROGRESS when the filesize is below 8k.  I modified the function and it's now displaying the correct amount transferred and percentage downloaded on zip files above 8k.  I'm not sure why the callback is so inconsistent but hopefully this is helpful to someone.  This was also modified to only display progress:

<?php

$ctx = stream_context_create();
stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));
$fileData = @file_get_contents('http://example.com/test.zip',false,$ctx);

function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
    static $filesize = null;
    switch($notification_code) {
    case STREAM_NOTIFY_FILE_SIZE_IS:
        $filesize = $bytes_max;
        break;
    case STREAM_NOTIFY_CONNECT:
        echo "Connected...\n";
        break;
    case STREAM_NOTIFY_PROGRESS:
        if ($bytes_transferred > 0 && $filesize >= 8192) {
            $bytes_transferred += 8192;
            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;
    }
}
?>
aetonsi
3 години пред
A couple of unreported behaviors:
- case 1) if this callback calls die/exit($msg), it will print $msg, then the execution will go on until the request/wrapper is consumed, emitting a "PHP Warning: Failed to call user notifier" on each invocation of the callback. After the last callback invocation, the script is immediately terminated.
- case 2) if this callback throws an exception, it will behave the same way as exit/die, except for the fact that after the last callback invocation it does not terminate the script. The exception is instead raised in the scope of the request/wrapper, and can be caught with a try catch (right there or at a higher level).

Example code for case 1). The final "TEST ECHO" string will NOT be printed.
<?php
$context = stream_context_create(['http' => ['ignore_errors' => true,]]);
stream_context_set_params($context, ['notification' => function () {
    die('error');
}]);

file_get_contents('https://www.google.com', false, $context);
echo "TEST ECHO";
?>

Example code for case 2). The exception is raised at the level of the file_get_contents call, it's catched, and the final "TEST ECHO" gets printed.
<?php
$context = stream_context_create(['http' => ['ignore_errors' => true,]]);
stream_context_set_params($context, ['notification' => function () {
    throw new Exception('...');
}]);

try{
    file_get_contents('https://www.google.com', false, $context);
}catch(exception $e) { }
echo "TEST ECHO";
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.