stream_notification_callback

(PHP 5 >= 5.2.0)

stream_notification_callbackUne fonction de rappel pour le paramètre de contexte notification

Description

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

Une fonction de rappel de type callable, utilisée par le paramètre de contexte notification, appelé lors d'un événement.

Note:

Ce n'est pas une réelle fonction, uniquement un prototype de la façon dont la fonction doit être.

Liste de paramètres

notification_code

Une des constantes de notification STREAM_NOTIFY_*.

severity

Une des constantes de notification STREAM_NOTIFY_SEVERITY_*.

message

Passé si un message descriptif est disponible pour cet événement.

message_code

Passé si un code de message descriptif est disponible pour cet événement.

La signification de cette valeur dépend du gestionnaire spécifique utilisé.

bytes_transferred

Si c'est possible, bytes_transferred sera rempli.

bytes_max

Si c'est possible, bytes_max sera rempli.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec stream_notification_callback()

<?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 "Redirection vers : ", $message;
			break;

		case STREAM_NOTIFY_CONNECT:
			echo "Connecté...";
			break;

		case STREAM_NOTIFY_FILE_SIZE_IS:
			echo "Récupération de la taille du fichier : ", $bytes_max;
			break;

		case STREAM_NOTIFY_MIME_TYPE_IS:
			echo "Type mime trouvé : ", $message;
			break;

		case STREAM_NOTIFY_PROGRESS:
			echo "En cours de téléchargement, déjà ", $bytes_transferred, " octets transférés";
			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);
?>
<?php
function usage($argv) {
	echo "Utilisation :\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 "Redirection vers : ", $message, "\n";
		break;

	case STREAM_NOTIFY_CONNECT:
		echo "Connecté...\n";
		break;

	case STREAM_NOTIFY_FILE_SIZE_IS:
		$filesize = $bytes_max;
		echo "Taille du fichier : ", $filesize, "\n";
		break;

	case STREAM_NOTIFY_MIME_TYPE_IS:
		echo "Type Mime : ", $message, "\n";
		break;

	case STREAM_NOTIFY_PROGRESS:
		if ($bytes_transferred > 0) {
			if (!isset($filesize)) {
				printf("\rTaille du fichier inconnue.. %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 "\nFait !\n";
	exit(0);
}

$err = error_get_last();
echo "\nErrrrreurr..\n", $err["message"], "\n";
exit(1);
?>

Exécutez l'exemple ci-dessus avec : php -n fetch.php http://no2.php.net/get/php-5-LATEST.tar.bz2/from/this/mirror php-latest.tar.bz2 affichera quelque chose similaire à :

Connecté...
Type Mime : text/html; charset=utf-8
Redirection vers : http://no2.php.net/distributions/php-5.2.5.tar.bz2
Connecté...
Taille du fichier : 7773024
Type Mime : application/octet-stream
[========================================>                                                           ] 40% (3076/7590 kb)

LoadingChargement en cours