Neos\Flow\ResourceManagement\Streams\ResourceStreamWrapper::open PHP Method

open() public method

This method is called immediately after the wrapper is initialized (f.e. by fopen() and file_get_contents()). $options can hold one of the following values OR'd together: STREAM_USE_PATH If path is relative, search for the resource using the include_path. STREAM_REPORT_ERRORS If this flag is set, you are responsible for raising errors using trigger_error() during opening of the stream. If this flag is not set, you should not raise any errors.
public open ( string $path, string $mode, integer $options, &$openedPathAndFilename ) : boolean
$path string Specifies the URL that was passed to the original function.
$mode string The mode used to open the file, as detailed for fopen().
$options integer Holds additional flags set by the streams API.
return boolean TRUE on success or FALSE on failure.
    public function open($path, $mode, $options, &$openedPathAndFilename)
    {
        // w, a or x should try to create the file
        // x should fail if file exists - fopen handles that below!
        if (strpos($mode, 'w') !== false || strpos($mode, 'a') !== false || strpos($mode, 'x') !== false) {
            $resourceUriOrStream = $this->evaluateResourcePath($path, false);
        } else {
            $resourceUriOrStream = $this->evaluateResourcePath($path);
        }
        if (is_resource($resourceUriOrStream)) {
            $this->handle = $resourceUriOrStream;
            return true;
        }
        $handle = $resourceUriOrStream !== false ? fopen($resourceUriOrStream, $mode) : false;
        if ($handle !== false) {
            $this->handle = $handle;
            $openedPathAndFilename = $resourceUriOrStream;
            return true;
        }
        return false;
    }

Usage Example

 /**
  * @test
  */
 public function openResolves40CharacterLongPackageKeysUsingThePackageManager()
 {
     $packageKey = 'Some.PackageKey.Containing.40.Characters';
     mkdir('vfs://Foo/Some/');
     file_put_contents('vfs://Foo/Some/Path', 'fixture');
     $this->mockPackageManager->expects($this->once())->method('isPackageAvailable')->with($packageKey)->will($this->returnValue(true));
     $mockPackage = $this->createMock(PackageInterface::class);
     $mockPackage->expects($this->any())->method('getResourcesPath')->will($this->returnValue('vfs://Foo'));
     $this->mockPackageManager->expects($this->once())->method('getPackage')->with($packageKey)->will($this->returnValue($mockPackage));
     $openedPathAndFilename = '';
     $this->assertTrue($this->resourceStreamWrapper->open('resource://' . $packageKey . '/Some/Path', 'r', 0, $openedPathAndFilename));
     $this->assertSame($openedPathAndFilename, 'vfs://Foo/Some/Path');
 }