pack
pack($format, ...$values)
Construit à partir de valeurs une chaîne binaire selon un format, par exemple des nombres sur 2 ou 4 octets dans un ordre fixe. Utile pour les fichiers binaires et les protocoles réseau.
Paramètres
- $format – codes de format, un code peut être suivi d’un nombre ou de * (toutes les valeurs restantes). Les plus courants : C (un octet de 0 à 255), n et v (16 bits, big-endian et little-endian), N et V (32 bits), J et P (64 bits), a et A (texte complété par des octets nuls ou des espaces), H (notation hexadécimale).
- $values – valeurs dans l’ordre des codes de format.
Exemples
// n = 16 bits big-endian, v = 16 bits little-endian, N = 32 bits big-endian
echo bin2hex(pack("nvN", 258, 258, 1)); // 0102020100000001
// texte complété à une longueur fixe : a par des octets nuls, A par des espaces
echo bin2hex(pack("a4", "ab")); // 61620000
echo "[" . pack("A4", "ab") . "]"; // [ab ]
// notation hexadécimale en octets
echo pack("H*", "4f4b"); // OK
// * applique le code à toutes les valeurs restantes
echo bin2hex(pack("C*", 1, 2, 255)); // 0102ff
// un nombre hors limites est tronqué sans avertissement (300 - 256 = 44)
echo bin2hex(pack("C", 300)); // 2c
Points d’attention
- Les codes s, S, l, L, i, I, q, Q, f et d utilisent l’ordre des octets et la taille du processeur. Pour les fichiers et le réseau, où le format doit être fixe, utilisez n, N, v, V, J et P.
- Les nombres hors des limites du code sont tronqués sans avertissement.
- Moins de valeurs que n’en demande le format : PHP 7.4 affiche un avertissement et renvoie false, PHP 8 lance une exception ValueError.
- Le résultat est une chaîne binaire. Pour la page ou le JSON, convertissez-le avec bin2hex() ou base64_encode().
Fonctions associées :
unpack()
bin2hex()
hex2bin()
chr()
base64_encode()