2017 © Pedro Peláez
 

library iso-9660

Stream Wrapper for ISO9660 files (.iso files)

image

vdechenaux/iso-9660

Stream Wrapper for ISO9660 files (.iso files)

  • Friday, July 6, 2018
  • by vdechenaux
  • Repository
  • 1 Watchers
  • 1 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

ISO9660 Stream Wrapper for PHP

PHP Stream Wrapper for ISO9660 files (.iso files), (*1)

CircleCI Coverage Status, (*2)

Usage

Install using Composer:, (*3)

$ composer require vdechenaux/iso-9660

Register the Stream Wrapper:, (*4)

\ISO9660\StreamWrapper::register();

Use it, with any function which supports stream wrappers:, (*5)

// Get the content
file_get_contents('iso9660://path/myIsoFile.iso#song.mp3');

// Get the size
filesize('iso9660://path/myIsoFile.iso#song.mp3');

// Check if ISO file contains a file
file_exists('iso9660://path/myIsoFile.iso#song.mp3');

// List files
$iterator = new RecursiveTreeIterator(new RecursiveDirectoryIterator('iso9660://myIsoFile.iso#'));
foreach ($iterator as $entry) {
    echo $entry.PHP_EOL;
}

// Get a stream on a file contained in the ISO file
// Here, a PNG file
$stream = fopen('iso9660://myIsoFile.iso#image.png', 'r');
fseek($stream, 1); // Skip 1st byte
$header = fread($stream, 3); // We should get "PNG"

// Etc...

You must separate the iso file and the internal path with a #, even if the right part is empty, like in above examples., (*6)

You can use the \ISO9660\Reader class if you don't want to use native PHP functions., (*7)

Custom context options

You can configure some behaviors of the reader: - showHiddenFiles (boolean, default: false) Set it to true to see/read hidden files., (*8)

To use options, you have to do something like this:, (*9)

$opts = [
    'iso9660' => [
        'showHiddenFiles'  => true,
    ]
];

$context  = stream_context_create($opts);

file_get_contents('iso9660:///tmp/file.iso#hidden.mp3', false, $context);

If you are using the \ISO9660\Reader class, you can use theses options by passing an \ISO9660\ReaderOptions object to the constructor., (*10)

Read from an optical drive

As this package is an ISO9660 implementation, you can directly read an optical drive by doing something like this:, (*11)

$iterator = new RecursiveTreeIterator(new RecursiveDirectoryIterator('iso9660:///dev/cdrom#'));
foreach ($iterator as $entry) {
    echo $entry.PHP_EOL;
}

By using /dev/cdrom instead of an ISO file, you can directly interact with the hardware, without mounting the disc in the OS., (*12)

ISO features supported

  • Basic ISO9660 support
  • Joliet support
  • SUSP
    • CE Continuation Area
    • SP System Use Sharing Protocol Indicator
    • ER Extensions Reference (supported types: RRIP_1991A, IEEE_P1282, IEEE_1282)
  • Rock Ridge support
    • CL Child link
    • PL Parent link
    • NM Alternate name
    • PX POSIX file attributes
    • RE Relocated directory
    • RR Rock Ridge extensions in-use indicator
    • SL Symbolic link
    • TF Time stamp(s) for a file

Why ?

Why not ? 🤷‍♂️, (*13)

I made it only for fun. I hope someone will find a usage 😁, (*14)

License

This project is released under the MIT license., (*15)

The Versions

06/07 2018

dev-master

9999999-dev

Stream Wrapper for ISO9660 files (.iso files)

  Sources   Download

MIT

The Requires

 

The Development Requires

iso iso9660 9660 cdrom joliet rock-ridge