<?php
 $NomF="donnees_utilisateurs.data";
 $fichier_binaire = fopen($NomF, "rb");
 // lecture à partir du fichier binaire
 $ChOctets = fread($fichier_binaire, filesize($NomF));
 // traitement de la chaine binaire lue
 while (strlen($ChOctets) >0)
 {// Décompactage des octets à partir de la  chaîne lue
  // -- traitement du nom ---
  // On récupère un octet (entier)=nombre de caractères à lire
  $tab_donnees_binaires = unpack("ctaille",$ChOctets);
  $taille=$tab_donnees_binaires['taille'];
  // On prépare le format de lecture de la chaîne 
  $format="a".$taille."nom";
  // On supprime l'octet (nb caractères à lire) de la chaîne
  $ChOctets=substr($ChOctets,1,strlen($ChOctets)-1);
  // On extrait la chaîne de caractères
  $tab_donnees_binaires = unpack($format,$ChOctets);
  $nom=$tab_donnees_binaires['nom'];
  // On supprime la donnée lue de la chaîne binaire
  $ChOctets=substr($ChOctets,$taille,strlen($ChOctets)-$taille);
  // -- traitement de la profession ---
  // On récupère un octet (entier)=nombre de caractères à lire
  $tab_donnees_binaires = unpack("ctaille",$ChOctets);
  $taille=$tab_donnees_binaires['taille'];
  // On prépare le format de lecture de la chaîne 
  $format="a".$taille."profession";
  // On supprime l'octet (nb caractères à lire) de la chaîne
  $ChOctets=substr($ChOctets,1,strlen($ChOctets)-1);
  // On extrait la chaîne de caractères
  $tab_donnees_binaires = unpack($format,$ChOctets);
  $prof=$tab_donnees_binaires['profession'];
  // On supprime la donnée lue de la chaîne binaire
  $ChOctets=substr($ChOctets,$taille,strlen($ChOctets)-$taille);
  // -- traitement du pays ---
  // On récupère un octet (entier)=nombre de caractères à lire
  $tab_donnees_binaires = unpack("ctaille",$ChOctets);
  $taille=$tab_donnees_binaires['taille'];
  // On prépare le format de lecture de la chaîne 
  $format="a".$taille."pays";
  // On supprime l'octet (nb caractères à lire) de la chaîne
  $ChOctets=substr($ChOctets,1,strlen($ChOctets)-1);
  // On extrait la chaîne de caractères
  $tab_donnees_binaires = unpack($format,$ChOctets);
  $pays=$tab_donnees_binaires['pays'];
  // On supprime la donnée lue de la chaîne binaire
  $ChOctets=substr($ChOctets,$taille,strlen($ChOctets)-$taille);
  // -- traitement de l'âge ---
  // -- on récupère un octet (entier) = âge
  $tab_donnees_binaires = unpack("cage",$ChOctets);
  $age=$tab_donnees_binaires['age'];
  // On supprime la donnée lue de la chaîne binaire
  $ChOctets=substr($ChOctets,1,strlen($ChOctets)-1);
  // -- Affichage --
  echo "----------------------------".PHP_EOL;
  echo "Nom        : ".$nom.PHP_EOL;
  echo "Profession : ".$prof.PHP_EOL;
  echo "Pays       : ".$pays.PHP_EOL;  
  echo "Age        : ".$age.PHP_EOL;  
 }
 fclose($fichier_binaire);
?>
