Dump décimal et hexadécimal d'un fichier ($_files)

Contenu du snippet

C'est l'occasion de jouer avec la variable superglobale $_FILES.

A défaut d'avoir un éditeur hexadécimal sous la main, autant l'avoir en ligne... ;)

Testé sous Apache 1.3.27, PHP 4.3.3, Windows.

NOTES:
1) Il est conseillé d'avoir un time-out PHP infini (=0)
2) Un fichier trop lourd fait ramer la machine
3) Le fichier suivant doit s'appeller "dump.php"

Source / Exemple :


<html>
<title>Dumper hexadécimal</title>
<body>
  <?php

    function SetStringLength($Value, $Len) {
      if (strlen($Value)<$Len)
        while (strlen($Value)!=$Len)
          $Value = '0'.$Value;
      return $Value;
    }

    function GetPost($key) {
      $rsl = '';
      if (isset($_POST[$key])) {
        $rsl = $_POST[$key];
      }
      return $rsl;
    }

    if (!isset($_FILES['FileName'])) {
  ?>

    <form name="FileSender" action="dump.php" method="post" ENCTYPE="multipart/form-data">
      Choisir le fichier (taille limitée à 256 ko)
      <br><input type="file" name="FileName">
      <br><input type="radio" name="mode" value="full" checked> Complet
      <br><input type="radio" name="mode" value="short"> Concis
      <br><input type="submit" name="butSend" value="Envoyer">
    </form>

  <?php
    } else {
      $Fln = $_FILES['FileName'];
      $FullMode = (strtolower(GetPost('mode'))=='full');

    //VERIFICATION DES ERREURS ET DES CONDITIONS DE BONNE UTILISATION
      if ($Fln['size']>262144) { //256 ko
        echo '<b>ERREUR:</b> la taille du fichier dépasse la limite autorisée';
        return 0;
      }
      if (!file_exists($Fln['tmp_name'])) { //256 ko
        echo '<b>ERREUR:</b> le fichier n\'existe pas';
        return 0;
      }
      if ($Fln['error']!=0) {
        echo '<b>ERREUR:</b> une erreur inconnue s\'est produite';
        return 0;
      }

    //OUVERTURE DU FICHIER
      $Hex='';
      $Dec='';
      $Char='';
      $CharPerLine = 16;
      $Offset = 0;
      echo '<p><a href="dump.php">Retour</a></p>';
      echo '<font size=+3>Dump du fichier "'.$Fln['name'].'"</font><br> ';
      echo '<font face="Courier New">';
      echo '<table cols=3 width="100%">';
      $fichier = fopen($Fln['tmp_name'], 'r');
      fseek($fichier, 0);
      for ($i=1 ; $i<=$Fln['size'] ; $i++) {
        $c = fgetc($fichier);

        if ($Hex!='') {
          if ($FullMode) $Hex .= '  ';
          else $Hex .= ' ';
        }
        $Hex .= SetStringLength(strtoupper(dechex(ord($c))),2);

        if ($Dec!='') { $Dec .= ' '; }
        $Dec .= SetStringLength(ord($c),3);

        if (ord($c)<32) { $c='<span style="BACKGROUND-COLOR: #F0F0F0"> </span>'; }
        else { $c = htmlentities($c); }
        $Char .= $c;

        if (($i % $CharPerLine==0) || ($i==$Fln['size'])) {
          if ($FullMode) {
            echo '<tr>';
            echo '<td><font color=maroon size=-1>#'.SetStringLength(dechex($Offset),8).'</font></td>';
            echo '<td><font color=navy size=-1>'.$Hex.'<br>'.$Dec.'</font></td>';
            echo '<td><font color=purple size=-1>'.$Char.'</font></td>';
            echo '</tr>';
          } else {
            echo $Hex.'<br>';
          }
          $Hex='';
          $Dec='';
          $Char='';
          $Offset += $CharPerLine;
        }
      }
      fclose($fichier);
      echo '</table>';
      echo '</font>';
    }
  ?>
</body>
</html>

Conclusion :


Vous pouvez toujours aller visiter http://altert.family.free.fr/

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.