PHP versions 4 and 5
Currently only supports SFTPv3, which, according to wikipedia.org, "is the most widely used version,
implemented by the popular OpenSSH SFTP server". If you want SFTPv4/5/6 support, provide me with access
to an SFTPv4/5/6 server.
The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.
Here's a short example of how to use this library:
login('username', 'password')) {
exit('Login Failed');
}
echo $sftp->pwd() . "\r\n";
$sftp->put('filename.ext', 'hello, world!');
print_r($sftp->nlist());
?>
LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Constants
NET_SFTP_LOG_SIMPLE
= NET_SSH2_LOG_SIMPLE
Returns the message numbers
NET_SFTP_LOG_COMPLEX
= NET_SSH2_LOG_COMPLEX
Returns the message content
NET_SFTP_CHANNEL
= 2
SFTP channel constant Net_SSH2::exec() uses 0 and Net_SSH2::read() / Net_SSH2::write() use 1.
Receives SFTP Packets See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present.
There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA
messages containing one SFTP packet.
Return value
Type
Description
String
Tags
Name
Description
see
access
private
_list(
$dir,
$raw
= true,
)
:
Mixed
Description
Reads a list, be it detailed or not, of files in the given directory
Arguments
Name
Type
Description
Default
$dir
n/a
$raw
n/a
true
Return value
Type
Description
Mixed
Tags
Name
Description
access
private
_parseAttributes(
String
$response,
)
:
Array
Description
Parse Attributes See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
Arguments
Name
Type
Description
Default
$response
String
Return value
Type
Description
Array
Tags
Name
Description
access
private
_parseLongname(
String
$longname,
)
:
Mixed
Description
Parse Longname SFTPv3 doesn't provide any easy way of identifying a file type. You could try to open
a file as a directory and see if an error is returned or you could try to parse the
SFTPv3-specific longname field of the SSH_FXP_NAME packet. That's what this function does.
The result is returned using the
{@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.
If the longname is in an unrecognized format bool(false) is returned.
Arguments
Name
Type
Description
Default
$longname
String
Return value
Type
Description
Mixed
Tags
Name
Description
access
private
_read_put_responses(
Integer
$i,
)
:
Boolean
Description
Reads multiple successive SSH_FXP_WRITE responses Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
SSH_FXP_WRITEs, in succession, and then reading $i responses.
Arguments
Name
Type
Description
Default
$i
Integer
Return value
Type
Description
Boolean
Tags
Name
Description
access
private
_realpath(
String
$dir,
)
:
Mixed
Description
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 $mode is set to NET_SFTP_CONFIRM_DIR (as opposed to NET_SFTP_CONFIRM_NONE,
which is what it is set to by default), false is returned if $dir is not a valid directory.
Sends SFTP Packets See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
Arguments
Name
Type
Description
Default
$type
Integer
$data
String
Return value
Type
Description
Boolean
Tags
Name
Description
see
see
access
private
_size(
String
$filename,
)
:
Mixed
Description
Returns the file size, in bytes, or false, on failure Determines the size without calling Net_SFTP::_realpath()
Arguments
Name
Type
Description
Default
$filename
String
Return value
Type
Description
Mixed
Tags
Name
Description
access
private
_stat(
String
$filename,
Integer
$type,
)
:
Mixed
Description
Returns general information about a file or symbolic link Determines information without calling Net_SFTP::_realpath().
The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.
Arguments
Name
Type
Description
Default
$filename
String
$type
Integer
Return value
Type
Description
Mixed
Tags
Name
Description
access
private
chdir(
String
$dir,
)
:
Boolean
Description
Changes the current directory
Arguments
Name
Type
Description
Default
$dir
String
Return value
Type
Description
Boolean
Tags
Name
Description
access
public
chmod(
Integer
$mode,
String
$filename,
)
:
Mixed
Description
Set permissions on a file. Returns the new file permissions on success or FALSE on error.
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
Arguments
Name
Type
Description
Default
$remote_file
String
$local_file
n/a
false
Return value
Type
Description
Mixed
Tags
Name
Description
access
public
getLastSFTPError(
)
:
String
Description
Returns the last error
Return value
Type
Description
String
Tags
Name
Description
access
public
getSFTPErrors(
)
:
String
Description
Returns all errors
Return value
Type
Description
String
Tags
Name
Description
access
public
getSFTPLog(
)
:
String
Description
Returns a log of the packets that have been sent and received. Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
The Packet Type The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support
concurrent actions, so it's somewhat academic, here.
Array
public
$packet_type_log
=
array()
Packet Type Log
Array
public
$packet_types
=
array()
Packet Types
String
public
$pwd
=
false
Current working directory
Integer
public
$request_id
=
false
The Request ID The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support
concurrent actions, so it's somewhat academic, here.