- stream_wrapper_register: documentation ( source)
- fclose: documentation ( source)
- fwrite: documentation ( source)
- fopen: documentation ( source)
<?php
class MyStreamWrapper
{
static $counter = 1;
private $id;
public function __construct()
{
$this->id = self::$counter++;
}
public function stream_open($path, $mode, $options, &$opened_path)
{
echo "({$this->id}) stream_open()\n";
return true;
}
public function stream_write($data)
{
echo "({$this->id}) stream_write()\n";
return \strlen($data);
}
public function stream_flush()
{
echo "({$this->id}) stream_flush()\n";
return true;
}
public function stream_close()
{
echo "({$this->id}) stream_close()\n";
return true;
}
public function __destruct()
{
echo "({$this->id}) __destruct()\n";
}
}
\stream_wrapper_register('test', MyStreamWrapper::class);
if (($handle = \fopen('test:///foobar', 'r+')) === false) {
throw new \RuntimeException("Failed to open file");
}
if (\fwrite($handle, 'test') === false) {
throw new \RuntimeException("Failed to write to file");
}
if (\fclose($handle) === false) {
throw new \RuntimeException("Failed to close file");
}
if (($handle2 = \fopen('test:///blubb', 'r+')) === false) {
throw new \RuntimeException("Failed to open file");
}
if (\fwrite($handle2, 'test') === false) {
throw new \RuntimeException("Failed to write to file");
}