172 lines
2.8 KiB
PHP
172 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Dummy file that just holds content in memory.
|
|
* Use when you don't want to commit data to disk but you need to pass a typed file object
|
|
*/
|
|
class Loco_fs_DummyFile extends Loco_fs_File {
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $contents = '';
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
private $mtime = 0;
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
private $fmode = 0644;
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
private $uid = 0;
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
private $gid = 0;
|
|
|
|
|
|
public function __construct($path){
|
|
parent::__construct($path);
|
|
$this->mtime = time();
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function exists(){
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getContents(){
|
|
return $this->contents;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function size(){
|
|
return strlen($this->contents);
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function putContents( $contents ){
|
|
$this->contents = (string) $contents;
|
|
return $this;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function modified(){
|
|
return $this->mtime;
|
|
}
|
|
|
|
|
|
/**
|
|
* Allow forcing of modified stamp for testing purposes
|
|
* @return Loco_fs_File
|
|
*/
|
|
public function touch( $modified ){
|
|
$this->mtime = (int) $modified;
|
|
return $this;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function mode(){
|
|
return $this->fmode;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function chmod( $mode, $recursive = false ){
|
|
$this->fmode = (int) $mode;
|
|
return $this;
|
|
}
|
|
|
|
|
|
/**
|
|
* TODO implement in parent
|
|
*/
|
|
public function chown( $uid = null, $gid = null ){
|
|
if( is_int($uid) ){
|
|
$this->uid = $uid;
|
|
}
|
|
if( is_int($gid) ){
|
|
$this->gid = $gid;
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function copy( $dest ){
|
|
$copy = clone $this;
|
|
$copy->path = $dest;
|
|
return $copy;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function uid(){
|
|
return $this->uid;
|
|
}
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function gid(){
|
|
return $this->gid;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
* @codeCoverageIgnore
|
|
*/
|
|
public function writable(){
|
|
$mode = $this->mode();
|
|
// world writable
|
|
if( $mode & 02 ){
|
|
return true;
|
|
}
|
|
// group writable
|
|
if( ( $mode & 020 ) && $this->gid() === Loco_compat_PosixExtension::getgid() ){
|
|
return true;
|
|
}
|
|
// owner writable
|
|
if( ( $mode & 0200 ) && $this->uid() === Loco_compat_PosixExtension::getuid() ){
|
|
return true;
|
|
}
|
|
// else locked:
|
|
return false;
|
|
}
|
|
|
|
} |