SFTP
class SFTP extends SSH2 (View source)
Pure-PHP implementations of SFTP.
Constants
MASK_CONSTRUCTOR |
|
MASK_CONNECTED |
|
MASK_LOGIN_REQ |
|
MASK_LOGIN |
|
MASK_SHELL |
|
MASK_WINDOW_ADJUST |
|
CHANNEL_EXEC |
|
CHANNEL_SHELL |
|
CHANNEL_SUBSYSTEM |
|
CHANNEL_AGENT_FORWARD |
|
CHANNEL_KEEP_ALIVE |
|
LOG_SIMPLE |
Returns the message numbers |
LOG_COMPLEX |
Returns the message content |
LOG_REALTIME |
Outputs the content real-time |
LOG_REALTIME_FILE |
Dumps the content real-time to a file |
LOG_MAX_SIZE |
Make sure that the log never gets larger than this |
READ_SIMPLE |
Returns when a string matching $expect exactly is found |
READ_REGEX |
Returns when a string matching the regular expression $expect is found |
READ_NEXT |
Returns whenever a data packet is received. Some data packets may only contain a single character so it may be necessary to call read() multiple times when using this option |
CHANNEL |
SFTP channel constant \phpseclib3\Net\SSH2::exec() uses 0 and \phpseclib3\Net\SSH2::read() / \phpseclib3\Net\SSH2::write() use 1. |
SOURCE_LOCAL_FILE |
Reads data from a local file. |
SOURCE_STRING |
Reads data from a string. |
SOURCE_CALLBACK |
Reads data from callback: function callback($length) returns string to proceed, null for EOF |
RESUME |
Resumes an upload |
RESUME_START |
Append a local file to an already existing remote file |
Properties
object | $fsock | The Socket Object | from SSH2 |
protected int | $bitmap | Execution Bitmap | from SSH2 |
protected array | $server_channels | Server Channels | from SSH2 |
protected array | $channel_status | Channel Status | from SSH2 |
protected int | $window_size | The Window Size | from SSH2 |
protected array | $window_size_server_to_client | Window size, server to client | from SSH2 |
protected | $timeout | Timeout | from SSH2 |
protected | $curTimeout | Current Timeout | from SSH2 |
protected string|false | $preferred_signature_format | Preferred Signature Format | from SSH2 |
protected array | $auth | Authentication Credentials | from SSH2 |
protected array | $sortOptions | Sort Options |
Methods
Default Constructor.
Login
Returns the output of an interactive shell
Pings a server connection, or tries to reconnect if the connection has gone down
Resets a connection for re-use
Gets channel data
Disconnect
Returns a log of the packets that have been sent and received.
Formats a log for printing
Returns a list of KEX algorithms that phpseclib supports
Returns a list of host key algorithms that phpseclib supports
Returns a list of symmetric key algorithms that phpseclib supports
Returns a list of MAC algorithms that phpseclib supports
Returns a list of compression algorithms that phpseclib supports
Accepts an associative array with up to four parameters as described at https://www.php.net/manual/en/function.ssh2-connect.php
Sets the number of columns and rows for the terminal window size.
Return the list of authentication methods that may productively continue authentication.
Disable the stat cache
Enable the stat cache
Clear the stat cache
Enable path canonicalization
Enable path canonicalization
Returns the current directory name
Canonicalize the Server-Side Path Name
Changes the current directory
Returns a list of files in the given directory
Returns a detailed list of files in the given directory
Defines how nlist() and rawlist() will be sorted - if at all.
Returns general information about a file.
Returns general information about a file or symbolic link.
Truncates a file to a given length
Sets access and modification time of file.
Changes file or directory owner
Changes file or directory group
Set permissions on a file.
Return the target of a symbolic link
Create a symlink
Creates a directory.
Removes a directory.
Uploads a file to the SFTP server.
Downloads a file from the SFTP server.
Deletes a file on the SFTP server.
Checks whether a file or directory exists
Tells whether the filename is a directory
Tells whether the filename is a regular file
Tells whether the filename is a symbolic link
Tells whether a file exists and is readable
Tells whether the filename is writable
Tells whether the filename is writeable
Gets last access time of file
Gets file modification time
Gets file permissions
Gets file owner
Gets file group
Gets file size
Gets file type
Renames a file or a directory on the SFTP server
Parse Attributes
Returns a log of the packets that have been sent and received.
Returns all errors
Returns the last error
Get supported SFTP versions
Enable Date Preservation
Disable Date Preservation
Details
SSH2|void
__construct(mixed $host, int $port = 22, int $timeout = 10)
Default Constructor.
Connects to an SFTP server
in
SSH2 at line 1149
static
setCryptoEngine(int $engine)
Set Crypto Engine Mode
Possible $engine values: OpenSSL, mcrypt, Eval, PHP
in
SSH2 at line 1163
sendIdentificationStringFirst()
Send Identification String First
https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, both sides MUST send an identification string". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
in
SSH2 at line 1177
sendIdentificationStringLast()
Send Identification String Last
https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, both sides MUST send an identification string". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
in
SSH2 at line 1191
sendKEXINITFirst()
Send SSH_MSG_KEXINIT First
https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
in
SSH2 at line 1205
sendKEXINITLast()
Send SSH_MSG_KEXINIT Last
https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
bool
login(string $username, string|AsymmetricKey|array[]|Agent|null ...$args)
Login
in
SSH2 at line 2082
protected bool
sublogin(string $username, string[] ...$args)
Login Helper
in
SSH2 at line 2540
setTimeout(mixed $timeout)
Set Timeout
$ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. Setting $timeout to false or 0 will mean there is no timeout.
in
SSH2 at line 2553
setKeepAlive(int $interval)
Set Keep Alive
Sends an SSH2_MSG_IGNORE message every x seconds, if x is a positive non-zero number.
in
SSH2 at line 2563
getStdError()
Get the output from stdError
in
SSH2 at line 2580
string
exec(string $command, callable $callback = null)
Execute Command
If $callback is set to false then \phpseclib3\Net\SSH2::get_channel_packet(self::CHANNEL_EXEC) will need to be called manually. In all likelihood, this is not a feature you want to be taking advantage of.
in
SSH2 at line 2812
bool
requestAgentForwarding()
Request agent forwarding of remote server
in
SSH2 at line 2853
string|bool|null
read(string $expect = '', int $mode = self::READ_SIMPLE)
Returns the output of an interactive shell
Returns when there's a match for $expect, which can take the form of a string literal or, if $mode == self::READ_REGEX, a regular expression.
in
SSH2 at line 2901
bool
write(string $cmd)
Inputs a command into an interactive shell.
in
SSH2 at line 2928
bool
startSubsystem(string $subsystem)
Start a subsystem.
Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened. To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented if there's sufficient demand for such a feature.
in
SSH2 at line 2978
bool
stopSubsystem()
Stops a subsystem.
in
SSH2 at line 2992
reset()
Closes a channel
If read() timed out you might want to just close the channel and have it auto-restart on the next read() call
in
SSH2 at line 3004
isTimeout()
Is timeout?
Did exec() or read() return because they timed out or because they encountered the end?
in
SSH2 at line 3014
disconnect()
Disconnect
in
SSH2 at line 3031
__destruct()
Destructor.
Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call disconnect().
in
SSH2 at line 3042
bool
isConnected()
Is the connection still active?
in
SSH2 at line 3053
bool
isAuthenticated()
Have you successfully been logged in?
in
SSH2 at line 3065
bool
ping()
Pings a server connection, or tries to reconnect if the connection has gone down
Inspired by http://php.net/manual/en/mysqli.ping.php
protected
reset_connection(int $reason)
Resets a connection for re-use
in
SSH2 at line 3561
enableQuietMode()
Enable Quiet Mode
Suppress stderr from output
in
SSH2 at line 3573
disableQuietMode()
Disable Quiet Mode
Show stderr in output
in
SSH2 at line 3586
bool
isQuietModeEnabled()
Returns whether Quiet Mode is enabled or not
in
SSH2 at line 3596
enablePTY()
Enable request-pty when using exec()
in
SSH2 at line 3606
disablePTY()
Disable request-pty when using exec()
in
SSH2 at line 3623
bool
isPTYEnabled()
Returns whether request-pty is enabled or not
in
SSH2 at line 3648
protected mixed
get_channel_packet(int $client_channel, bool $skip_extended = false)
Gets channel data
Returns the data as a string. bool(true) is returned if:
- the server closes the channel
- if the connection times out
- if the channel status is CHANNEL_OPEN and the response was CHANNEL_OPEN_CONFIRMATION
- if the channel status is CHANNEL_REQUEST and the response was CHANNEL_SUCCESS
bool(false) is returned if:
- if the channel status is CHANNEL_REQUEST and the response was CHANNEL_FAILURE
in
SSH2 at line 3869
protected bool
send_binary_packet(string $data, string $logged = null)
Sends Binary Packets
See '6. Binary Packet Protocol' of rfc4253 for more info.
in
SSH2 at line 4070
protected bool
send_channel_packet(int $client_channel, string $data)
Sends channel data
Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate
protected bool
disconnect_helper(int $reason)
Disconnect
in
SSH2 at line 4180
protected
define_array(array ...$args)
Define Array
Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of named constants from it, using the value as the name of the constant and the index as the value of the constant. If any of the constants that would be defined already exists, none of the constants will be defined.
in
SSH2 at line 4201
array|false|string
getLog()
Returns a log of the packets that have been sent and received.
Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
in
SSH2 at line 4226
protected string
format_log(array $message_log, array $message_number_log)
Formats a log for printing
in
SSH2 at line 4295
string[]
getErrors()
Returns all errors
in
SSH2 at line 4306
string
getLastError()
Returns the last error
in
SSH2 at line 4321
string
getServerIdentification()
Return the server identification.
in
SSH2 at line 4334
array
getServerAlgorithms()
Returns a list of algorithms the server supports
in
SSH2 at line 4362
static array
getSupportedKEXAlgorithms()
Returns a list of KEX algorithms that phpseclib supports
in
SSH2 at line 4399
static array
getSupportedHostKeyAlgorithms()
Returns a list of host key algorithms that phpseclib supports
in
SSH2 at line 4419
static array
getSupportedEncryptionAlgorithms()
Returns a list of symmetric key algorithms that phpseclib supports
in
SSH2 at line 4524
static array
getSupportedMACAlgorithms()
Returns a list of MAC algorithms that phpseclib supports
in
SSH2 at line 4555
static array
getSupportedCompressionAlgorithms()
Returns a list of compression algorithms that phpseclib supports
in
SSH2 at line 4571
array
getAlgorithmsNegotiated()
Return list of negotiated algorithms
Uses the same format as https://www.php.net/ssh2-methods-negotiated
in
SSH2 at line 4597
setTerminal(string $term)
Allows you to set the terminal
in
SSH2 at line 4609
setPreferredAlgorithms(array $methods)
Accepts an associative array with up to four parameters as described at https://www.php.net/manual/en/function.ssh2-connect.php
in
SSH2 at line 4696
string
getBannerMessage()
Returns the banner message.
Quoting from the RFC, "in some jurisdictions, sending a warning message before authentication may be relevant for getting legal protection."
in
SSH2 at line 4712
mixed
getServerPublicHostKey()
Returns the server public host key.
Caching this the first time you connect to a server and checking the result on subsequent connections is recommended. Returns false if the server signature is not signed correctly with the public host key.
in
SSH2 at line 4799
false|int
getExitStatus()
Returns the exit status of an SSH command or false.
in
SSH2 at line 4813
int
getWindowColumns()
Returns the number of columns for the terminal window size.
in
SSH2 at line 4824
int
getWindowRows()
Returns the number of rows for the terminal window size.
in
SSH2 at line 4835
setWindowColumns(int $value)
Sets the number of columns for the terminal window size.
in
SSH2 at line 4846
setWindowRows(int $value)
Sets the number of rows for the terminal window size.
in
SSH2 at line 4858
setWindowSize(int $columns = 80, int $rows = 24)
Sets the number of columns and rows for the terminal window size.
in
SSH2 at line 4870
string
__toString()
To String Magic Method
in
SSH2 at line 4885
string
getResourceId()
Get Resource ID
We use } because that symbols should not be in URL according to {@link http://tools.ietf.org/html/rfc3986#section-2 RFC}. It will safe us from any conflicts, because otherwise regexp will match all alphanumeric domains.
in
SSH2 at line 4897
static bool|SSH2
getConnectionByResourceId(string $id)
Return existing connection
in
SSH2 at line 4907
static SSH2[]
getConnections()
Return all excising connections
in
SSH2 at line 4936
array|null
getAuthMethodsToContinue()
Return the list of authentication methods that may productively continue authentication.
disableStatCache()
Disable the stat cache
enableStatCache()
Enable the stat cache
clearStatCache()
Clear the stat cache
enablePathCanonicalization()
Enable path canonicalization
disablePathCanonicalization()
Enable path canonicalization
mixed
pwd()
Returns the current directory name
mixed
realpath(string $path)
Canonicalize the Server-Side Path Name
SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it. Returns the absolute (canonicalized) path.
If canonicalize_paths has been disabled using disablePathCanonicalization(), $path is returned as-is.
bool
chdir(string $dir)
Changes the current directory
mixed
nlist(string $dir = '.', bool $recursive = false)
Returns a list of files in the given directory
mixed
rawlist(string $dir = '.', bool $recursive = false)
Returns a detailed list of files in the given directory
setListOrder(string[] ...$args)
Defines how nlist() and rawlist() will be sorted - if at all.
If sorting is enabled directories and files will be sorted independently with directories appearing before files in the resultant array that is returned.
Any parameter returned by stat is a valid sort parameter for this function. Filename comparisons are case insensitive.
Examples:
$sftp->setListOrder('filename', SORT_ASC); $sftp->setListOrder('size', SORT_DESC, 'filename', SORT_ASC); $sftp->setListOrder(true); Separates directories from files but doesn't do any sorting beyond that $sftp->setListOrder(); Don't do any sort of sorting
mixed
stat(string $filename)
Returns general information about a file.
Returns an array on success and false otherwise.
mixed
lstat(string $filename)
Returns general information about a file or symbolic link.
Returns an array on success and false otherwise.
bool
truncate(string $filename, int $new_size)
Truncates a file to a given length
bool
touch(string $filename, int $time = null, int $atime = null)
Sets access and modification time of file.
If the file does not exist, it will be created.
bool
chown(string $filename, int $uid, bool $recursive = false)
Changes file or directory owner
Returns true on success or false on error.
bool
chgrp(string $filename, int $gid, bool $recursive = false)
Changes file or directory group
Returns true on success or false on error.
mixed
chmod(int $mode, string $filename, bool $recursive = false)
Set permissions on a file.
Returns the new file permissions on success or false on error. If $recursive is true than this just returns true or false.
mixed
readlink(string $link)
Return the target of a symbolic link
bool
symlink(string $target, string $link)
Create a symlink
symlink() creates a symbolic link to the existing target with the specified name link.
bool
mkdir(string $dir, int $mode = -1, bool $recursive = false)
Creates a directory.
bool
rmdir(string $dir)
Removes a directory.
bool
put(string $remote_file, string|resource $data, int $mode = self::SOURCE_STRING, int $start = -1, int $local_start = -1, callable|null $progressCallback = null)
Uploads a file to the SFTP server.
By default, \phpseclib3\Net\SFTP::put() does not read from the local filesystem. $data is dumped directly into $remote_file. So, for example, if you set $data to 'filename.ext' and then do \phpseclib3\Net\SFTP::get(), you will get a file, twelve bytes long, containing 'filename.ext' as its contents.
Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior. With self::SOURCE_LOCAL_FILE, $remote_file will contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how large $remote_file will be, as well.
Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number of bytes to return, and returns a string if there is some data or null if there is no more data
If $data is a resource then it'll be used as a resource instead.
Currently, only binary mode is supported. As such, if the line endings need to be adjusted, you will need to take care of that, yourself.
$mode can take an additional two parameters - self::RESUME and self::RESUME_START. These are bitwise AND'd with $mode. So if you want to resume upload of a 300mb file on the local file system you'd set $mode to the following:
self::SOURCE_LOCAL_FILE | self::RESUME
If you wanted to simply append the full contents of a local file to the full contents of a remote file you'd replace self::RESUME with self::RESUME_START.
If $mode & (self::RESUME | self::RESUME_START) then self::RESUME_START will be assumed.
$start and $local_start give you more fine grained control over this process and take precident over self::RESUME when they're non-negative. ie. $start could let you write at the end of a file (like self::RESUME) or in the middle of one. $local_start could let you start your reading from the end of a file (like self::RESUME_START) or in the middle of one.
Setting $local_start to > 0 or $mode | self::RESUME_START doesn't do anything unless $mode | self::SOURCE_LOCAL_FILE.
{@internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - \phpseclib3\Net\SFTP::setMode().}
mixed
get(string $remote_file, string|bool|resource|callable $local_file = false, int $offset = 0, int $length = -1, callable|null $progressCallback = null)
Downloads a file from the SFTP server.
Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if the operation was unsuccessful. If $local_file is defined, returns true or false depending on the success of the operation.
$offset and $length can be used to download files in chunks.
bool
delete(string $path, bool $recursive = true)
Deletes a file on the SFTP server.
bool
file_exists(string $path)
Checks whether a file or directory exists
bool
is_dir(string $path)
Tells whether the filename is a directory
bool
is_file(string $path)
Tells whether the filename is a regular file
bool
is_link(string $path)
Tells whether the filename is a symbolic link
bool
is_readable(string $path)
Tells whether a file exists and is readable
bool
is_writable(string $path)
Tells whether the filename is writable
bool
is_writeable(string $path)
Tells whether the filename is writeable
Alias of is_writable
mixed
fileatime(string $path)
Gets last access time of file
mixed
filemtime(string $path)
Gets file modification time
mixed
fileperms(string $path)
Gets file permissions
mixed
fileowner(string $path)
Gets file owner
mixed
filegroup(string $path)
Gets file group
mixed
filesize(string $path)
Gets file size
mixed
filetype(string $path)
Gets file type
bool
rename(string $oldname, string $newname)
Renames a file or a directory on the SFTP server
protected array
parseAttributes(string $response)
Parse Attributes
See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
array|string
getSFTPLog()
Returns a log of the packets that have been sent and received.
Returns a string if NET_SFTP_LOGGING == self::LOG_COMPLEX, an array if NET_SFTP_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
array
getSFTPErrors()
Returns all errors
string
getLastSFTPError()
Returns the last error
array
getSupportedVersions()
Get supported SFTP versions
enableDatePreservation()
Enable Date Preservation
disableDatePreservation()
Disable Date Preservation