stream_notification_callbackUna función de retrollamada para el parámetro de contexto de notificación
&reftitle.description;
voidstream_notification_callbackintnotification_codeintseveritystringmessageintmessage_codeintbytes_transferredintbytes_max
Una función de tipo callable, usada por el
parámetro de contexto de notificación,
llamado durante un evento.
Esta no es una función real, sólo un prototipo de cómo la función debería
ser.
&reftitle.parameters;
notification_code
Una de las constantes de notificación STREAM_NOTIFY_*.
severity
Una de las constantes de notificación STREAM_NOTIFY_SEVERITY_*.
message
Pasado si un mensaje descriptivo está disponible para el evento.
message_code
Pasado si un código de mensaje descriptivo está disponible para el evento.
Esto significa que el valor depende de la envoltura específica en uso.
bytes_transferred
Si se puede aplicar, el parámetro bytes_transferred será
rellenado.
bytes_max
Si se puede aplicar, el parámetro bytes_max será
rellenado.
&reftitle.returnvalues;
&return.void;
&reftitle.examples;
Ejemplo de stream_notification_callback
"stream_notification_callback"));
file_get_contents("http://php.net/contact", false, $ctx);
?>
]]>
&example.outputs.similar;
Barra de progreso sencilla para la descarga por parte del cliente por línea de comandos\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 "Redireccionando a: ", $message, "\n";
break;
case STREAM_NOTIFY_CONNECT:
echo "Conectado...\n";
break;
case STREAM_NOTIFY_FILE_SIZE_IS:
$filesize = $bytes_max;
echo "Tamaño de archivo: ", $filesize, "\n";
break;
case STREAM_NOTIFY_MIME_TYPE_IS:
echo "Tipo mime: ", $message, "\n";
break;
case STREAM_NOTIFY_PROGRESS:
if ($bytes_transferred > 0) {
if (!isset($filesize)) {
printf("\rTamaño de archivo desconocido.. %2d kb hecho..", $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 "\n¡Hecho!\n";
exit(0);
}
$err = error_get_last();
echo "\nErrrrrorr..\n", $err["message"], "\n";
exit(1);
?>
]]>
Ejecutar el ejemplo anterior con:
php -n fetch.php
http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror
php-latest.tar.bz2 imprimirá algo similar a:
] 40% (3076/7590 kb)
]]>
&reftitle.seealso;