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)
- Host: GitHub
- URL: https://github.com/vdechenaux/iso-9660
- Owner: vdechenaux
- License: mit
- Created: 2018-07-03T17:27:24.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-05-01T08:23:08.000Z (almost 2 years ago)
- Last Synced: 2025-03-24T17:01:46.198Z (30 days ago)
- Topics: cdrom, iso, iso9660, joliet, php, rockridge, stream-wrapper
- Language: PHP
- Homepage:
- Size: 40 KB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ISO9660 Stream Wrapper for PHP
PHP Stream Wrapper for ISO9660 files (.iso files)
[](https://dl.circleci.com/status-badge/redirect/gh/vdechenaux/iso-9660/tree/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).