Net_SFTP_Stream
class Net_SFTP_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
Registers this class as a URL wrapper.
The Constructor
Path Parser
Opens file or URL
Read from stream
Write to stream
Retrieve the current position of a stream
Tests for end-of-file on a file pointer
Seeks to specific location in a stream
Change stream options
Retrieve the underlaying resource
Advisory file locking
Renames a file or directory
Open directory handle
Read entry from directory handle
Rewind directory handle
Close directory handle
Create a directory
Removes a directory
Flushes the output
Retrieve information about a file resource
Delete a file
Retrieve information about a file
Truncate stream
Change stream options
Close an resource
__call Magic Method
Details
        
                static            bool
    register(string $protocol = 'sftp')
        
    
    Registers this class as a URL wrapper.
        
                            
    __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.
        
                            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
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.
        
                            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
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 Net_SFTP does.
        
                            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
        
                            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
Only valid $options is STREAM_MKDIR_RECURSIVE
        
                            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?
        
                            bool
    _stream_flush()
        
    
    Flushes the output
See http://php.net/fflush. Always returns true because Net_SFTP doesn't cache stuff before writing
        
                            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
Ignores the STREAM_URL_STAT_QUIET flag because the entirety of 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
        
                            bool
    _stream_truncate(int $new_size)
        
    
    Truncate stream
        
                            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 Net_SFTP.
        
                            
    _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.