<?php 
namespace GuzzleHttp\Psr7; 
 
use Psr\Http\Message\StreamInterface; 
 
/** 
 * Lazily reads or writes to a file that is opened only after an IO operation 
 * take place on the stream. 
 */ 
class LazyOpenStream implements StreamInterface 
{ 
    use StreamDecoratorTrait; 
 
    /** @var string File to open */ 
    private $filename; 
 
    /** @var string $mode */ 
    private $mode; 
 
    /** 
     * @param string $filename File to lazily open 
     * @param string $mode     fopen mode to use when opening the stream 
     */ 
    public function __construct($filename, $mode) 
    { 
        $this->filename = $filename; 
        $this->mode = $mode; 
    } 
 
    /** 
     * Creates the underlying stream lazily when required. 
     * 
     * @return StreamInterface 
     */ 
    protected function createStream() 
    { 
        return stream_for(try_fopen($this->filename, $this->mode)); 
    } 
} 
 
 |