private function createFile(string $path, string $mode = null, int $options = null)
    {
        $names = $this->splitPath($path);
        if (empty($names['dirname']) === true) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('File ' . $names['basename'] . ' does not exist', E_USER_WARNING);
            }

            return false;
        }

        /** @var vfsStreamDirectory|null $dir */
        $dir = $this->getContentOfType($names['dirname'], vfsStreamContent::TYPE_DIR);
        if (null === $dir) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Directory ' . $names['dirname'] . ' does not exist', E_USER_WARNING);
            }

            return false;
        } elseif ($dir->hasChild($names['basename']) === true) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Directory ' . $names['dirname'] . ' already contains a director named ' . $names['basename'], E_USER_WARNING);
            }

            return false;
        }

        if (self::READ === $mode) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Can not open non-existing file ' . $path . ' for reading', E_USER_WARNING);
            }

            return false;
        }

        if ($dir->isWritable(vfsStream::getCurrentUser(), vfsStream::getCurrentGroup()) === false) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Can not create new file in non-writable path ' . $names['dirname'], E_USER_WARNING);
            }

            return false;
        }

        /** @var vfsStreamFile $file */
        $file = vfsStream::newFile($names['basename'])->at($dir);

        return $file;
    }
private function createFile(string $path, string $mode = null, int $options = null)
    {
        $names = $this->splitPath($path);
        if (empty($names['dirname']) === true) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('File ' . $names['basename'] . ' does not exist', E_USER_WARNING);
            }

            return false;
        }

        /** @var vfsStreamDirectory|null $dir */
        $dir = $this->getContentOfType($names['dirname'], vfsStreamContent::TYPE_DIR);
        if (null === $dir) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Directory ' . $names['dirname'] . ' does not exist', E_USER_WARNING);
            }

            return false;
        } elseif ($dir->hasChild($names['basename']) === true) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Directory ' . $names['dirname'] . ' already contains a director named ' . $names['basename'], E_USER_WARNING);
            }

            return false;
        }

        if (self::READ === $mode) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Can not open non-existing file ' . $path . ' for reading', E_USER_WARNING);
            }

            return false;
        }

        if ($dir->isWritable(vfsStream::getCurrentUser(), vfsStream::getCurrentGroup()) === false) {
            if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
                trigger_error('Can not create new file in non-writable path ' . $names['dirname'], E_USER_WARNING);
            }

            return false;
        }

        /** @var vfsStreamFile $file */
        $file = vfsStream::newFile($names['basename'])->at($dir);

        return $file;
    }
private function createFile ( string $ path , string $ mode = null , int $ options = null ) { $ names = $ this -> splitPath ( $ path ) ; if ( empty ( $ names [ 'dirname' ] ) === true ) { if ( ( $ options & STREAM_REPORT_ERRORS ) === STREAM_REPORT_ERRORS ) { trigger_error ( 'File ' . $ names [ 'basename' ] . ' does not exist' , E_USER_WARNING ) ; } return false ; } /** @var vfsStreamDirectory|null $dir */ $ dir = $ this -> getContentOfType ( $ names [ 'dirname' ] , vfsStreamContent :: TYPE_DIR ) ; if ( null === $ dir ) { if ( ( $ options & STREAM_REPORT_ERRORS ) === STREAM_REPORT_ERRORS ) { trigger_error ( 'Directory ' . $ names [ 'dirname' ] . ' does not exist' , E_USER_WARNING ) ; } return false ; } elseif ( $ dir -> hasChild ( $ names [ 'basename' ] ) === true ) { if ( ( $ options & STREAM_REPORT_ERRORS ) === STREAM_REPORT_ERRORS ) { trigger_error ( 'Directory ' . $ names [ 'dirname' ] . ' already contains a director named ' . $ names [ 'basename' ] , E_USER_WARNING ) ; } return false ; } if ( self :: READ === $ mode ) { if ( ( $ options & STREAM_REPORT_ERRORS ) === STREAM_REPORT_ERRORS ) { trigger_error ( 'Can not open non-existing file ' . $ path . ' for reading' , E_USER_WARNING ) ; } return false ; } if ( $ dir -> isWritable ( vfsStream :: getCurrentUser ( ) , vfsStream :: getCurrentGroup ( ) ) === false ) { if ( ( $ options & STREAM_REPORT_ERRORS ) === STREAM_REPORT_ERRORS ) { trigger_error ( 'Can not create new file in non-writable path ' . $ names [ 'dirname' ] , E_USER_WARNING ) ; } return false ; } /** @var vfsStreamFile $file */ $ file = vfsStream :: newFile ( $ names [ 'basename' ] ) -> at ( $ dir ) ; return $ file ; }
creates a file at given path

@param   string       $path     the path to open
@param   string|null  $mode     mode for opening
@param   int|null     $options  options for opening
@return  vfsStreamFile|false
creates a file at given path