public function patch($data, $rangeType, $offset = null)
    {
        switch ($rangeType) {
            case 1:
                $f = fopen($this->path, 'a');
                break;
            case 2:
                $f = fopen($this->path, 'c');
                fseek($f, $offset);
                break;
            case 3:
                $f = fopen($this->path, 'c');
                fseek($f, $offset, SEEK_END);
                break;
        }
        if (is_string($data)) {
            fwrite($f, $data);
        } else {
            stream_copy_to_stream($data, $f);
        }
        fclose($f);
        clearstatcache(true, $this->path);

        return $this->getETag();
    }
public function patch($data, $rangeType, $offset = null)
    {
        switch ($rangeType) {
            case 1:
                $f = fopen($this->path, 'a');
                break;
            case 2:
                $f = fopen($this->path, 'c');
                fseek($f, $offset);
                break;
            case 3:
                $f = fopen($this->path, 'c');
                fseek($f, $offset, SEEK_END);
                break;
        }
        if (is_string($data)) {
            fwrite($f, $data);
        } else {
            stream_copy_to_stream($data, $f);
        }
        fclose($f);
        clearstatcache(true, $this->path);

        return $this->getETag();
    }
public function patch ( $ data , $ rangeType , $ offset = null ) { switch ( $ rangeType ) { case 1 : $ f = fopen ( $ this -> path , 'a' ) ; break ; case 2 : $ f = fopen ( $ this -> path , 'c' ) ; fseek ( $ f , $ offset ) ; break ; case 3 : $ f = fopen ( $ this -> path , 'c' ) ; fseek ( $ f , $ offset , SEEK_END ) ; break ; } if ( is_string ( $ data ) ) { fwrite ( $ f , $ data ) ; } else { stream_copy_to_stream ( $ data , $ f ) ; } fclose ( $ f ) ; clearstatcache ( true , $ this -> path ) ; return $ this -> getETag ( ) ; }
Updates the file based on a range specification.

The first argument is the data, which is either a readable stream
resource or a string.

The second argument is the type of update we're doing.
This is either:
* 1. append
* 2. update based on a start byte
* 3. update based on an end byte
;
The third argument is the start or end byte.

After a successful put operation, you may choose to return an ETag. The
ETAG must always be surrounded by double-quotes. These quotes must
appear in the actual string you're returning.

Clients may use the ETag from a PUT request to later on make sure that
when they update the file, the contents haven't changed in the mean
time.

@param resource|string $data
@param int             $rangeType
@param int             $offset

@return string|null
Updates the file based on a range specification .