PHP Classes

PHP Hex Dump: Output data from file in hexadecimal format

Recommend this page to a friend!
  Info   View files Example   View files View files (9)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2023-12-03 (1 month ago) RSS 2.0 feedNot enough user ratingsTotal: 201 All time: 8,455 This week: 131Up
Version License PHP version Categories
hex-dump 1.0.2GNU Lesser Genera...5.3PHP 5, Debug, Files and Folders, Text...
Description 

Author

This class can output data from file in hexadecimal format.

It can read a sequence of bytes from a file or stream and outputs the byte values in rows of 16 bytes.

In the same row it also show the offset of the bytes being displayed and the respective ASCII characters for the outputted bytes if the characters are printable.

The class can return the hexadecimal dump as plain text or encoded for output in HTML pages.

Innovation Award
PHP Programming Innovation award nominee
August 2015
Number 13
Sometimes it is necessary to inspect the contents of binary data files.

This class can generate dump of any file by showing the hexadecimal codes of each byte, as well the ASCII character that they represent if the character is printable.

Manuel Lemos
Picture of Asbjorn Grandt
Name: Asbjorn Grandt <contact>
Classes: 10 packages by
Country: Denmark Denmark
Innovation award
Innovation award
Nominee: 4x

Example

<?php
error_reporting
(E_ALL | E_STRICT);
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 1);

include
"../vendor/autoload.php";

use
grandt\DebugTools\DebugHelpers;
use
grandt\DebugTools\HexBlock;

$srcFile = 'resources/Squares.gif';

echo
"<!doctype html><html><head><title>DebugTools.Test1</title></head><body><pre>\n";
$fh = fopen($srcFile, "rb");
echo
"Skip 3 bytes\n";
$data = fread($fh, 3);
echo
"Dump 68 bytes\n";
echo
HexBlock::createBlock($fh, 68, true);
echo
"\n\nHexBlock::createBlock returns the file pointer to its original position:\n";
echo
"Dump 0x10 bytes\n";
echo
HexBlock::createBlock($fh, 0x10, true);
echo
"\n\nRead 32 bytes into a string for use in the next calls.\n";
$data2 = fread($fh, 0x20);
fclose($fh);
echo
"\nDump 16 bytes from a string (Will always start at pos 0x00. While the string was read from the same stream above, it doesn't come with an offset pointer into the stream.)\n";
echo
HexBlock::createBlock($data2, 16, true);
echo
"\n\nRequest Dump of 48 bytes from a string, 16 bytes more than is available.\n";
echo
HexBlock::createBlock($data2, 48, true);
echo
"\n\nAlternatively, turn the string into a file handle, and manipulate that.\n";
$fh = DebugHelpers::str2resource($data.$data2);
echo
HexBlock::createBlock($fh, 32, true);
echo
"Skip 3 bytes\n";
$data = fread($fh, 3);
echo
"\n\nDump 68 bytes (using the data read earlier, 3 + 32 bytes total)\n";
echo
HexBlock::createBlock($fh, 68, true);
fclose($fh);

echo
"</pre></body></html>\n";


Details

DebugTools

This package aims to provide some nice debug tools. Well, just one tool for now.

Introduction

For now, only the HexBlock is added. What it does is provide an easy way to dump binary data directly from a currently open file stream. Example output of a gif file, where the file pointer is on position 3, the method have been told to dump the following 68 bytes.

Note that the file pointer will be reset to its initial position after the dump, essentially leaving the handle unaffected.

    Start: 0x03; Length: 68 (0x44)
    00: -- -- -- 38 39 61 59 00  68 00 c4 15 00 ad df ff | ---89aY. h.......
    10: e5 f4 ff cb ea ff ff ff  ff 98 d6 fe b7 b9 bb 81 | ........ ........
    20: d2 ff 77 cc ff 8f c5 fe  54 9a f5 11 28 7d 65 ab | ..w..... T...(}e.
    30: fe 52 75 a1 7a b7 fb 66  cc ff 5b cc fe 00 66 ff | .Ru.z..f ..[...f.
    40: 0f 71 ff ff 39 00 b3 --  -- -- -- -- -- -- -- -- | .q..9..- --------

Usage

Call

    $block = HexBlock::createBlock($handle, $length, $encodeHtml [Default = true]);

$encodeHtml merely ensures that any html entities are encoded as such, but doesn't add any line break tags.

The function also accepts a string as an argument (from 1.0.1), and will dump that string from the first byte.

    $block = HexBlock::createBlock($dataString, $length, $encodeHtml [Default = true]);

To assist in debugging, having a test string behave as a file handle can be useful. str2resource was added in DebugTools 1.0.1.

    $fh = DebugHelpers::str2resource($stringData);
    // work
    fclose($fh); // Remember to close the handle to free up memory.

Warning

Parsing -1 as the $bytes parameter will cause the function to dump the entirety of the file.

Import

Add this requirement to your composer.json file:

    "grandt/phpdebugtools": ">=1.0.1"

Composer

If you already have Composer installed, skip this part.

Packagist, the main composer repository has a neat and very short guide.

Or you can look at the guide at the Composer site.

The easiest for first time users, is to have the composer installed in the same directory as your composer.json file, though there are better options.

Run this from the command line:

php -r "readfile('https://getcomposer.org/installer');" | php

This will check your PHP installation, and download the composer.phar, which is the composer binary. This file is not needed on the server though.

Once composer is installed you can create the composer.json file to import this package.

{
    "require": {
        "grandt/phpdebugtools": ">=1.0.1"
    }
}

Followed by telling Composer to install the dependencies.

php composer.phar install

this will download and place all dependencies defined in your composer.json file in the vendor directory.

Finally, you include the autoload.php file in the new vendor directory.

<?php
    require 'vendor/autoload.php';
    .
    .
    .

Example

    include "../vendor/autoload.php";
    use grandt\DebugTools;

    $srcFile = "[path to file]";

    $fh = fopen($srcFile, "rb");
    echo HexBlock::createBlock($fh, 68, true);
    fclose($fh);

  Files folder image Files  
File Role Description
Files folder imagesrc (1 directory)
Files folder imagetests (1 file, 1 directory)
Accessible without login Plain text file composer.json Data Initial release
Accessible without login HTML file GNU Lesser General...are Foundation.html Doc. Documentation
Accessible without login HTML file README.html Doc. Documentation
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file REVISION.TXT Data Revision history

  Files folder image Files  /  src  
File Role Description
Files folder imageDebugTools (2 files)

  Files folder image Files  /  src  /  DebugTools  
File Role Description
  Plain text file DebugHelpers.php Class Added dump of a string * Added: DebugHelpers class with a str2resource function * Changed: HexBlock now also takes a string as input.
  Plain text file HexBlock.php Class Initial release

  Files folder image Files  /  tests  
File Role Description
Files folder imageresources (1 file)
  Accessible without login Plain text file DebugTools.Test1.php Example Initial release

  Files folder image Files  /  tests  /  resources  
File Role Description
  Accessible without login Image file Squares.gif Data Initial release

Downloadhex-dump-2023-12-03.zip 21KB
Downloadhex-dump-2023-12-03.tar.gz 18KB
Install with ComposerInstall with Composer
Needed packages  
Class DownloadWhy it is needed Dependency
Bin String Download .zip .tar.gz To circumvent the problems caused by mbstring.func_overload Required
 Version Control Unique User Downloads Download Rankings  
 100%
Total:201
This week:0
All time:8,455
This week:131Up