class Stream (View source)

SFTP Stream Wrapper

Properties

static array $instances SFTP instances
object $sftp SFTP instance
string $path Path
string $mode Mode
int $pos Position
int $size Size
array $entries Directory entries
bool $eof EOF flag
resource $context Context resource
callable $notification Notification callback function

Methods

static bool
register(string $protocol = 'sftp')

Registers this class as a URL wrapper.

__construct()

The Constructor

string
_parse_path(string $path)

Path Parser

bool
_stream_open(string $path, string $mode, int $options, string $opened_path)

Opens file or URL

mixed
_stream_read(int $count)

Read from stream

mixed
_stream_write(string $data)

Write to stream

int
_stream_tell()

Retrieve the current position of a stream

bool
_stream_eof()

Tests for end-of-file on a file pointer

bool
_stream_seek(int $offset, int $whence)

Seeks to specific location in a stream

bool
_stream_metadata(string $path, int $option, mixed $var)

Change stream options

resource
_stream_cast(int $cast_as)

Retrieve the underlaying resource

bool
_stream_lock(int $operation)

Advisory file locking

bool
_rename(string $path_from, string $path_to)

Renames a file or directory

bool
_dir_opendir(string $path, int $options)

Open directory handle

mixed
_dir_readdir()

Read entry from directory handle

bool
_dir_rewinddir()

Rewind directory handle

bool
_dir_closedir()

Close directory handle

bool
_mkdir(string $path, int $mode, int $options)

Create a directory

bool
_rmdir(string $path, int $options)

Removes a directory

bool
_stream_flush()

Flushes the output

mixed
_stream_stat()

Retrieve information about a file resource

bool
_unlink(string $path)

Delete a file

mixed
_url_stat(string $path, int $flags)

Retrieve information about a file

bool
_stream_truncate(int $new_size)

Truncate stream

bool
_stream_set_option(int $option, int $arg1, int $arg2)

Change stream options

_stream_close()

Close an resource

mixed
__call(string $name, array $arguments)

__call Magic Method

Details

static bool register(string $protocol = 'sftp')

Registers this class as a URL wrapper.

Parameters

string $protocol The wrapper name to be registered.

Return Value

bool True on success, false otherwise.

__construct()

The Constructor

string _parse_path(string $path)

Path Parser

Extract a path from a URI and actually connect to an SSH server if appropriate

If "notification" is set as a context parameter the message code for successful login is NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE.

Parameters

string $path

Return Value

string

bool _stream_open(string $path, string $mode, int $options, string $opened_path)

Opens file or URL

Parameters

string $path
string $mode
int $options
string $opened_path

Return Value

bool

mixed _stream_read(int $count)

Read from stream

Parameters

int $count

Return Value

mixed

mixed _stream_write(string $data)

Write to stream

Parameters

string $data

Return Value

mixed

int _stream_tell()

Retrieve the current position of a stream

Return Value

int

bool _stream_eof()

Tests for end-of-file on a file pointer

In my testing there are four classes functions that normally effect the pointer: fseek, fputs / fwrite, fgets / fread and ftruncate.

Only fgets / fread, however, results in feof() returning true. do fputs($fp, 'aaa') on a blank file and feof() will return false. do fread($fp, 1) and feof() will then return true. do fseek($fp, 10) on ablank file and feof() will return false. do fread($fp, 1) and feof() will then return true.

Return Value

bool

bool _stream_seek(int $offset, int $whence)

Seeks to specific location in a stream

Parameters

int $offset
int $whence

Return Value

bool

bool _stream_metadata(string $path, int $option, mixed $var)

Change stream options

Parameters

string $path
int $option
mixed $var

Return Value

bool

resource _stream_cast(int $cast_as)

Retrieve the underlaying resource

Parameters

int $cast_as

Return Value

resource

bool _stream_lock(int $operation)

Advisory file locking

Parameters

int $operation

Return Value

bool

bool _rename(string $path_from, string $path_to)

Renames a file or directory

Attempts to rename oldname to newname, moving it between directories if necessary. If newname exists, it will be overwritten. This is a departure from what \phpseclib\Net\SFTP does.

Parameters

string $path_from
string $path_to

Return Value

bool

bool _dir_opendir(string $path, int $options)

Open directory handle

The only $options is "whether or not to enforce safe_mode (0x04)". Since safe mode was deprecated in 5.3 and removed in 5.4 I'm just going to ignore it.

Also, nlist() is the best that this function is realistically going to be able to do. When an SFTP client sends a SSH_FXP_READDIR packet you don't generally get info on just one file but on multiple files. Quoting the SFTP specs:

The SSH_FXP_NAME response has the following format:

   uint32     id
   uint32     count
   repeats count times:
           string     filename
           string     longname
           ATTRS      attrs

Parameters

string $path
int $options

Return Value

bool

mixed _dir_readdir()

Read entry from directory handle

Return Value

mixed

bool _dir_rewinddir()

Rewind directory handle

Return Value

bool

bool _dir_closedir()

Close directory handle

Return Value

bool

bool _mkdir(string $path, int $mode, int $options)

Create a directory

Only valid $options is STREAM_MKDIR_RECURSIVE

Parameters

string $path
int $mode
int $options

Return Value

bool

bool _rmdir(string $path, int $options)

Removes a directory

Only valid $options is STREAM_MKDIR_RECURSIVE per http://php.net/streamwrapper.rmdir, however, http://php.net/rmdir does not have a $recursive parameter as mkdir() does so I don't know how STREAM_MKDIR_RECURSIVE is supposed to be set. Also, when I try it out with rmdir() I get 8 as $options. What does 8 correspond to?

Parameters

string $path
int $options

Return Value

bool

bool _stream_flush()

Flushes the output

See http://php.net/fflush. Always returns true because \phpseclib\Net\SFTP doesn't cache stuff before writing

Return Value

bool

mixed _stream_stat()

Retrieve information about a file resource

Return Value

mixed

Delete a file

Parameters

string $path

Return Value

bool

mixed _url_stat(string $path, int $flags)

Retrieve information about a file

Ignores the STREAM_URL_STAT_QUIET flag because the entirety of \phpseclib\Net\SFTP\Stream is quiet by default might be worthwhile to reconstruct bits 12-16 (ie. the file type) if mode doesn't have them but we'll cross that bridge when and if it's reached

Parameters

string $path
int $flags

Return Value

mixed

bool _stream_truncate(int $new_size)

Truncate stream

Parameters

int $new_size

Return Value

bool

bool _stream_set_option(int $option, int $arg1, int $arg2)

Change stream options

STREAM_OPTION_WRITE_BUFFER isn't supported for the same reason stream_flush isn't. The other two aren't supported because of limitations in \phpseclib\Net\SFTP.

Parameters

int $option
int $arg1
int $arg2

Return Value

bool

_stream_close()

Close an resource

mixed __call(string $name, array $arguments)

__call Magic Method

When you're utilizing an SFTP stream you're not calling the methods in this class directly - PHP is calling them for you. Which kinda begs the question... what methods is PHP calling and what parameters is it passing to them? This function lets you figure that out.

If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method.

Parameters

string $name
array $arguments

Return Value

mixed