Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. vfsStreamFile.php

class vfsStreamFile

File container.

@api

Hierarchy

  • class \org\bovigo\vfs\vfsStreamAbstractContent implements \org\bovigo\vfs\vfsStreamContent
    • class \org\bovigo\vfs\vfsStreamFile extends \org\bovigo\vfs\vfsStreamAbstractContent

Expanded class hierarchy of vfsStreamFile

3 files declare their use of vfsStreamFile
vfsStreamPrintVisitor.php in vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php
vfsStreamStructureVisitor.php in vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php
vfsStreamVisitor.php in vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php

File

vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamFile.php, line 18

Namespace

org\bovigo\vfs
View source
class vfsStreamFile extends vfsStreamAbstractContent {
    
    /**
     * content of the file
     *
     * @type  FileContent
     */
    private $content;
    
    /**
     * Resource id which exclusively locked this file
     *
     * @type  string
     */
    protected $exclusiveLock;
    
    /**
     * Resources ids which currently holds shared lock to this file
     *
     * @type  bool[string]
     */
    protected $sharedLock = array();
    
    /**
     * constructor
     *
     * @param  string  $name
     * @param  int     $permissions  optional
     */
    public function __construct($name, $permissions = null) {
        $this->content = new StringBasedFileContent('');
        $this->type = vfsStreamContent::TYPE_FILE;
        parent::__construct($name, $permissions);
    }
    
    /**
     * returns default permissions for concrete implementation
     *
     * @return  int
     * @since   0.8.0
     */
    protected function getDefaultPermissions() {
        return 0666;
    }
    
    /**
     * checks whether the container can be applied to given name
     *
     * @param   string  $name
     * @return  bool
     */
    public function appliesTo($name) {
        return $name === $this->name;
    }
    
    /**
     * alias for withContent()
     *
     * @param   string  $content
     * @return  vfsStreamFile
     * @see     withContent()
     */
    public function setContent($content) {
        return $this->withContent($content);
    }
    
    /**
     * sets the contents of the file
     *
     * Setting content with this method does not change the time when the file
     * was last modified.
     *
     * @param   string]FileContent  $content
     * @return  vfsStreamFile
     * @throws  \InvalidArgumentException
     */
    public function withContent($content) {
        if (is_string($content)) {
            $this->content = new StringBasedFileContent($content);
        }
        elseif ($content instanceof FileContent) {
            $this->content = $content;
        }
        else {
            throw new \InvalidArgumentException('Given content must either be a string or an instance of org\\bovigo\\vfs\\content\\FileContent');
        }
        return $this;
    }
    
    /**
     * returns the contents of the file
     *
     * Getting content does not change the time when the file
     * was last accessed.
     *
     * @return  string
     */
    public function getContent() {
        return $this->content
            ->content();
    }
    
    /**
     * simply open the file
     *
     * @since  0.9
     */
    public function open() {
        $this->content
            ->seek(0, SEEK_SET);
        $this->lastAccessed = time();
    }
    
    /**
     * open file and set pointer to end of file
     *
     * @since  0.9
     */
    public function openForAppend() {
        $this->content
            ->seek(0, SEEK_END);
        $this->lastAccessed = time();
    }
    
    /**
     * open file and truncate content
     *
     * @since  0.9
     */
    public function openWithTruncate() {
        $this->open();
        $this->content
            ->truncate(0);
        $time = time();
        $this->lastAccessed = $time;
        $this->lastModified = $time;
    }
    
    /**
     * reads the given amount of bytes from content
     *
     * Using this method changes the time when the file was last accessed.
     *
     * @param   int     $count
     * @return  string
     */
    public function read($count) {
        $this->lastAccessed = time();
        return $this->content
            ->read($count);
    }
    
    /**
     * returns the content until its end from current offset
     *
     * Using this method changes the time when the file was last accessed.
     *
     * @return  string
     * @deprecated  since 1.3.0
     */
    public function readUntilEnd() {
        $this->lastAccessed = time();
        return $this->content
            ->readUntilEnd();
    }
    
    /**
     * writes an amount of data
     *
     * Using this method changes the time when the file was last modified.
     *
     * @param   string  $data
     * @return  int amount of written bytes
     */
    public function write($data) {
        $this->lastModified = time();
        return $this->content
            ->write($data);
    }
    
    /**
     * Truncates a file to a given length
     *
     * @param   int  $size length to truncate file to
     * @return  bool
     * @since   1.1.0
     */
    public function truncate($size) {
        $this->content
            ->truncate($size);
        $this->lastModified = time();
        return true;
    }
    
    /**
     * checks whether pointer is at end of file
     *
     * @return  bool
     */
    public function eof() {
        return $this->content
            ->eof();
    }
    
    /**
     * returns the current position within the file
     *
     * @return  int
     * @deprecated  since 1.3.0
     */
    public function getBytesRead() {
        return $this->content
            ->bytesRead();
    }
    
    /**
     * seeks to the given offset
     *
     * @param   int   $offset
     * @param   int   $whence
     * @return  bool
     */
    public function seek($offset, $whence) {
        return $this->content
            ->seek($offset, $whence);
    }
    
    /**
     * returns size of content
     *
     * @return  int
     */
    public function size() {
        return $this->content
            ->size();
    }
    
    /**
     * locks file for
     *
     * @param   resource|vfsStreamWrapper $resource
     * @param   int  $operation
     * @return  bool
     * @since   0.10.0
     * @see     https://github.com/mikey179/vfsStream/issues/6
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function lock($resource, $operation) {
        if ((LOCK_NB & $operation) == LOCK_NB) {
            $operation = $operation - LOCK_NB;
        }
        // call to lock file on the same file handler firstly releases the lock
        $this->unlock($resource);
        if (LOCK_EX === $operation) {
            if ($this->isLocked()) {
                return false;
            }
            $this->setExclusiveLock($resource);
        }
        elseif (LOCK_SH === $operation) {
            if ($this->hasExclusiveLock()) {
                return false;
            }
            $this->addSharedLock($resource);
        }
        return true;
    }
    
    /**
     * Removes lock from file acquired by given resource
     *
     * @param   resource|vfsStreamWrapper $resource
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function unlock($resource) {
        if ($this->hasExclusiveLock($resource)) {
            $this->exclusiveLock = null;
        }
        if ($this->hasSharedLock($resource)) {
            unset($this->sharedLock[$this->getResourceId($resource)]);
        }
    }
    
    /**
     * Set exlusive lock on file by given resource
     *
     * @param   resource|vfsStreamWrapper $resource
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    protected function setExclusiveLock($resource) {
        $this->exclusiveLock = $this->getResourceId($resource);
    }
    
    /**
     * Add shared lock on file by given resource
     *
     * @param   resource|vfsStreamWrapper $resource
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    protected function addSharedLock($resource) {
        $this->sharedLock[$this->getResourceId($resource)] = true;
    }
    
    /**
     * checks whether file is locked
     *
     * @param   resource|vfsStreamWrapper $resource
     * @return  bool
     * @since   0.10.0
     * @see     https://github.com/mikey179/vfsStream/issues/6
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function isLocked($resource = null) {
        return $this->hasSharedLock($resource) || $this->hasExclusiveLock($resource);
    }
    
    /**
     * checks whether file is locked in shared mode
     *
     * @param   resource|vfsStreamWrapper $resource
     * @return  bool
     * @since   0.10.0
     * @see     https://github.com/mikey179/vfsStream/issues/6
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function hasSharedLock($resource = null) {
        if (null !== $resource) {
            return isset($this->sharedLock[$this->getResourceId($resource)]);
        }
        return !empty($this->sharedLock);
    }
    
    /**
     * Returns unique resource id
     *
     * @param   resource|vfsStreamWrapper $resource
     * @return  string
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function getResourceId($resource) {
        if (is_resource($resource)) {
            $data = stream_get_meta_data($resource);
            $resource = $data['wrapper_data'];
        }
        return spl_object_hash($resource);
    }
    
    /**
     * checks whether file is locked in exclusive mode
     *
     * @param   resource|vfsStreamWrapper $resource
     * @return  bool
     * @since   0.10.0
     * @see     https://github.com/mikey179/vfsStream/issues/6
     * @see     https://github.com/mikey179/vfsStream/issues/40
     */
    public function hasExclusiveLock($resource = null) {
        if (null !== $resource) {
            return $this->exclusiveLock === $this->getResourceId($resource);
        }
        return null !== $this->exclusiveLock;
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title Overrides
vfsStreamAbstractContent::$group protected property owner group of the file
vfsStreamAbstractContent::$lastAccessed protected property timestamp of last access
vfsStreamAbstractContent::$lastAttributeModified protected property timestamp of last attribute modification
vfsStreamAbstractContent::$lastModified protected property timestamp of last modification
vfsStreamAbstractContent::$name protected property name of the container
vfsStreamAbstractContent::$parentPath private property path to to this content
vfsStreamAbstractContent::$permissions protected property permissions for content
vfsStreamAbstractContent::$type protected property type of the container
vfsStreamAbstractContent::$user protected property owner of the file
vfsStreamAbstractContent::at public function adds content to given container Overrides vfsStreamContent::at
vfsStreamAbstractContent::chgrp public function change owner group of file to given group Overrides vfsStreamContent::chgrp
vfsStreamAbstractContent::chmod public function change file mode to given permissions Overrides vfsStreamContent::chmod
vfsStreamAbstractContent::chown public function change owner of file to given user Overrides vfsStreamContent::chown
vfsStreamAbstractContent::fileatime public function returns the last access time of the stream content
vfsStreamAbstractContent::filectime public function returns the last attribute modification time of the stream content
vfsStreamAbstractContent::filemtime public function returns the last modification time of the stream content Overrides vfsStreamContent::filemtime
vfsStreamAbstractContent::getGroup public function returns owner group of file Overrides vfsStreamContent::getGroup
vfsStreamAbstractContent::getName public function returns the file name of the content Overrides vfsStreamContent::getName
vfsStreamAbstractContent::getPermissions public function returns permissions Overrides vfsStreamContent::getPermissions
vfsStreamAbstractContent::getType public function returns the type of the container Overrides vfsStreamContent::getType
vfsStreamAbstractContent::getUser public function returns owner of file Overrides vfsStreamContent::getUser
vfsStreamAbstractContent::isExecutable public function checks whether content is executable Overrides vfsStreamContent::isExecutable
vfsStreamAbstractContent::isOwnedByGroup public function checks whether file is owned by group Overrides vfsStreamContent::isOwnedByGroup
vfsStreamAbstractContent::isOwnedByUser public function checks whether file is owned by given user Overrides vfsStreamContent::isOwnedByUser
vfsStreamAbstractContent::isReadable public function checks whether content is readable Overrides vfsStreamContent::isReadable
vfsStreamAbstractContent::isWritable public function checks whether content is writable Overrides vfsStreamContent::isWritable
vfsStreamAbstractContent::lastAccessed public function sets last access time of the stream content
vfsStreamAbstractContent::lastAttributeModified public function sets the last attribute modification time of the stream content
vfsStreamAbstractContent::lastModified public function sets the last modification time of the stream content Overrides vfsStreamContent::lastModified
vfsStreamAbstractContent::path public function returns path to this content Overrides vfsStreamContent::path
vfsStreamAbstractContent::rename public function renames the content Overrides vfsStreamContent::rename 1
vfsStreamAbstractContent::setParentPath public function sets parent path Overrides vfsStreamContent::setParentPath 1
vfsStreamAbstractContent::url public function returns complete vfsStream url for this content Overrides vfsStreamContent::url
vfsStreamContent::TYPE_BLOCK constant stream content type: block
vfsStreamContent::TYPE_DIR constant stream content type: directory
vfsStreamContent::TYPE_FILE constant stream content type: file
vfsStreamFile::$content private property content of the file
vfsStreamFile::$exclusiveLock protected property Resource id which exclusively locked this file
vfsStreamFile::$sharedLock protected property Resources ids which currently holds shared lock to this file
vfsStreamFile::addSharedLock protected function Add shared lock on file by given resource
vfsStreamFile::appliesTo public function checks whether the container can be applied to given name Overrides vfsStreamAbstractContent::appliesTo
vfsStreamFile::eof public function checks whether pointer is at end of file
vfsStreamFile::getBytesRead Deprecated public function returns the current position within the file
vfsStreamFile::getContent public function returns the contents of the file
vfsStreamFile::getDefaultPermissions protected function returns default permissions for concrete implementation Overrides vfsStreamAbstractContent::getDefaultPermissions
vfsStreamFile::getResourceId public function Returns unique resource id
vfsStreamFile::hasExclusiveLock public function checks whether file is locked in exclusive mode
vfsStreamFile::hasSharedLock public function checks whether file is locked in shared mode
vfsStreamFile::isLocked public function checks whether file is locked
vfsStreamFile::lock public function locks file for
vfsStreamFile::open public function simply open the file
vfsStreamFile::openForAppend public function open file and set pointer to end of file
vfsStreamFile::openWithTruncate public function open file and truncate content
vfsStreamFile::read public function reads the given amount of bytes from content
vfsStreamFile::readUntilEnd Deprecated public function returns the content until its end from current offset
vfsStreamFile::seek public function seeks to the given offset
vfsStreamFile::setContent public function alias for withContent()
vfsStreamFile::setExclusiveLock protected function Set exlusive lock on file by given resource
vfsStreamFile::size public function returns size of content Overrides vfsStreamContent::size
vfsStreamFile::truncate public function Truncates a file to a given length
vfsStreamFile::unlock public function Removes lock from file acquired by given resource
vfsStreamFile::withContent public function sets the contents of the file
vfsStreamFile::write public function writes an amount of data
vfsStreamFile::__construct public function constructor Overrides vfsStreamAbstractContent::__construct 1
RSS feed
Powered by Drupal