An open API service indexing awesome lists of open source software.

https://github.com/vdechenaux/iso-9660

PHP Stream Wrapper for ISO9660 files (.iso files)
https://github.com/vdechenaux/iso-9660

cdrom iso iso9660 joliet php rockridge stream-wrapper

Last synced: 13 days ago
JSON representation

PHP Stream Wrapper for ISO9660 files (.iso files)

Awesome Lists containing this project

README

        

# ISO9660 Stream Wrapper for PHP

PHP Stream Wrapper for ISO9660 files (.iso files)

[![CircleCI](https://dl.circleci.com/status-badge/img/gh/vdechenaux/iso-9660/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/vdechenaux/iso-9660/tree/master)
[![Coverage Status](https://coveralls.io/repos/github/vdechenaux/iso-9660/badge.svg?branch=master)](https://coveralls.io/github/vdechenaux/iso-9660?branch=master)

## Usage

Install using Composer:

```
$ composer require vdechenaux/iso-9660
```

Register the Stream Wrapper:

```php
\ISO9660\StreamWrapper::register();
```

Use it, with any function which supports stream wrappers:

```php
// 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.

You can use the `\ISO9660\Reader` class if you don't want to use native PHP functions.

### Custom context options

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

To use options, you have to do something like this:

```php
$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.

### Read from an optical drive

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

```php
$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.

## 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 ? 🤷‍♂️

I made it only for fun. I hope someone will find a usage 😁

## License

This project is released under [the MIT license](LICENSE).