FtpClient uses FtpConnectionTrait, FtpCryptoTrait, FtpDirectoryTrait, FtpFileTrait
A modern, strongly-typed FTP / FTPS client.
The client is a thin façade that composes its behaviour from focused traits.
It never touches ext-ftp directly: every transport call goes through an
injected FtpDriverInterface, which keeps the whole surface testable and
leaves room for alternative transports (e.g. a future SFTP driver).
use oihana\ftp\FtpClient ;
use oihana\ftp\enums\Ftp ;
use oihana\ftp\enums\FtpSecurity ;
$client = new FtpClient
([
Ftp::HOST => 'ftp.example.org' ,
Ftp::USERNAME => 'alice' ,
Ftp::PASSWORD => 's3cr3t' ,
Ftp::SECURITY => FtpSecurity::SSL ,
]) ;
$client->connect() ;
// ... transfers ...
$client->disconnect() ;
Tags
Table of Contents
Properties
- $maxRetries : int
- The maximum number of attempts for a transient (connection) failure.
- $connected : bool
- Whether the client is currently connected.
- $credentials : FtpCredentials
- The login credentials.
- $driver : FtpDriverInterface
- The transport driver.
- $host : string
- The remote host.
- $passive : bool
- Whether passive mode is enabled.
- $port : int
- The control-channel port.
- $root : string
- The remote base directory entered right after login (empty to stay in the default directory).
- $secure : bool
- Whether the transport is secured (FTPS).
- $security : string
- The transport security mode.
- $timeout : int
- The connection timeout, in seconds.
- $transferMode : string
- The default transfer mode applied to file operations.
Methods
- __construct() : mixed
- Creates a new FTP client.
- __destruct() : mixed
- Closes the connection on destruction.
- append() : static
- Appends the contents of a local file to a remote file.
- changeDirectory() : static
- Changes the current working directory.
- chmod() : static
- Changes the permissions of a remote file.
- connect() : static
- Opens the connection and authenticates, retrying transient failures with exponential backoff. A no-op when already connected.
- createDirectories() : static
- Creates a directory and every missing parent along the path (best effort).
- createDirectory() : static
- Creates a remote directory.
- currentDirectory() : string
- Returns the current working directory.
- delete() : static
- Deletes a remote file.
- disconnect() : static
- Closes the connection if it is open.
- download() : static
- Downloads a remote file to the local filesystem.
- downloadDecrypted() : static
- Downloads an encrypted remote file and decrypts it to the local filesystem.
- exists() : bool
- Indicates whether a remote file exists (and exposes a readable size).
- getCredentials() : FtpCredentials
- Returns the configured login credentials.
- getHost() : string
- Returns the configured remote host.
- getMaxRetries() : int
- Returns the configured maximum number of connection attempts.
- getPort() : int
- Returns the configured control-channel port.
- getRoot() : string
- Returns the configured remote root directory.
- getTimeout() : int
- Returns the configured connection timeout.
- getTransferMode() : string
- Returns the default transfer mode applied to file operations.
- isConnected() : bool
- Indicates whether a connection is currently open.
- isPassive() : bool
- Indicates whether passive mode is enabled.
- isSecure() : bool
- Indicates whether the transport is secured (FTPS).
- lastModified() : int
- Returns the last-modified time of a remote file, as a Unix timestamp.
- listFiles() : array<int, FtpFile>
- Returns the structured entries of a directory.
- listNames() : array<int, string>
- Returns the names of the entries in a directory.
- parentDirectory() : static
- Moves up to the parent directory.
- rawList() : array<int, string>
- Returns the raw, server-formatted listing of a directory.
- removeDirectory() : static
- Removes a remote directory.
- rename() : static
- Renames or moves a remote file or directory.
- size() : int
- Returns the size of a remote file, in bytes.
- upload() : static
- Uploads a local file to the server.
- uploadEncrypted() : static
- Encrypts a local file and uploads the ciphertext to the server.
- waitBeforeRetry() : void
- Pauses between two connection attempts. Isolated so tests can override it without changing the retry logic.
- applyRoot() : void
- Changes into the configured root directory, if any, right after connecting.
- assertLocalFile() : void
- Asserts that a local file exists and is readable.
- ensureConnected() : void
- Asserts that the client holds an open connection.
- establish() : void
- Performs a single connect + authenticate sequence.
- initializeConfig() : void
- Reads the configuration array into the connection state.
- resolveTransferMode() : int
- Resolves a transfer-mode string to its `ext-ftp` resource value.
- temporaryCryptoFile() : string
- Creates a temporary file used to hold ciphertext during a secure transfer.
Properties
$maxRetries
The maximum number of attempts for a transient (connection) failure.
public
int
$maxRetries
= 3
$connected
Whether the client is currently connected.
private
bool
$connected
= false
$credentials
The login credentials.
private
FtpCredentials
$credentials
$driver
The transport driver.
private
FtpDriverInterface
$driver
$host
The remote host.
private
string
$host
= ''
$passive
Whether passive mode is enabled.
private
bool
$passive
= true
$port
The control-channel port.
private
int
$port
= 21
$root
The remote base directory entered right after login (empty to stay in the default directory).
private
string
$root
= ''
$secure
Whether the transport is secured (FTPS).
private
bool
$secure
= false
$security
The transport security mode.
private
string
$security
= \oihana\ftp\enums\FtpSecurity::NONE
$timeout
The connection timeout, in seconds.
private
int
$timeout
= 90
$transferMode
The default transfer mode applied to file operations.
private
string
$transferMode
= \oihana\ftp\enums\FtpTransferMode::BINARY
Methods
__construct()
Creates a new FTP client.
public
__construct([array<string|int, mixed>|FtpOptions $init = [] ][, FtpDriverInterface|null $driver = null ][, ContainerInterface|null $container = null ]) : mixed
Parameters
- $init : array<string|int, mixed>|FtpOptions = []
-
Configuration keyed by Ftp constants (or an FtpOptions instance):
host,port,username,password,security,passive,timeout,maxRetries, plus any logger options. - $driver : FtpDriverInterface|null = null
-
The transport driver. Defaults to a NativeFtpDriver.
- $container : ContainerInterface|null = null
-
Optional PSR-11 container used to resolve a logger service.
Tags
__destruct()
Closes the connection on destruction.
public
__destruct() : mixed
append()
Appends the contents of a local file to a remote file.
public
append(string $localFile, string $remoteFile[, string|null $mode = null ]) : static
Parameters
- $localFile : string
-
The source path on the local filesystem.
- $remoteFile : string
-
The destination path on the server.
- $mode : string|null = null
-
The transfer mode; defaults to the client's configured mode.
Tags
Return values
static —This instance, for chaining.
changeDirectory()
Changes the current working directory.
public
changeDirectory(string $directory) : static
Parameters
- $directory : string
-
The target directory.
Tags
Return values
static —This instance, for chaining.
chmod()
Changes the permissions of a remote file.
public
chmod(string $remoteFile, int $permissions) : static
Parameters
- $remoteFile : string
-
The remote path.
- $permissions : int
-
The new permissions, as an octal value (e.g. 0644).
Tags
Return values
static —This instance, for chaining.
connect()
Opens the connection and authenticates, retrying transient failures with exponential backoff. A no-op when already connected.
public
connect() : static
Tags
Return values
static —This instance, for chaining.
createDirectories()
Creates a directory and every missing parent along the path (best effort).
public
createDirectories(string $path) : static
Each path segment is created in turn; segments that already exist are silently
skipped, mirroring mkdir -p.
Parameters
- $path : string
-
The directory path to create.
Tags
Return values
static —This instance, for chaining.
createDirectory()
Creates a remote directory.
public
createDirectory(string $directory) : static
Parameters
- $directory : string
-
The directory to create.
Tags
Return values
static —This instance, for chaining.
currentDirectory()
Returns the current working directory.
public
currentDirectory() : string
Tags
Return values
string —The absolute path of the current directory.
delete()
Deletes a remote file.
public
delete(string $remoteFile) : static
Parameters
- $remoteFile : string
-
The path of the file to delete.
Tags
Return values
static —This instance, for chaining.
disconnect()
Closes the connection if it is open.
public
disconnect() : static
Return values
static —This instance, for chaining.
download()
Downloads a remote file to the local filesystem.
public
download(string $remoteFile, string $localFile[, string|null $mode = null ][, bool $createDirectory = true ]) : static
Parameters
- $remoteFile : string
-
The source path on the server.
- $localFile : string
-
The destination path on the local filesystem.
- $mode : string|null = null
-
The transfer mode (one of FtpTransferMode); defaults to the client's configured mode.
- $createDirectory : bool = true
-
Whether to create the local parent directory if missing.
Tags
Return values
static —This instance, for chaining.
downloadDecrypted()
Downloads an encrypted remote file and decrypts it to the local filesystem.
public
downloadDecrypted(string $remoteFile, string $localFile, string $passphrase) : static
Parameters
- $remoteFile : string
-
The ciphertext source on the server.
- $localFile : string
-
The plaintext destination on the local filesystem.
- $passphrase : string
-
The passphrase used to derive the decryption key.
Tags
Return values
static —This instance, for chaining.
exists()
Indicates whether a remote file exists (and exposes a readable size).
public
exists(string $remoteFile) : bool
Directories and files whose size the server refuses to report are treated as absent.
Parameters
- $remoteFile : string
-
The remote path.
Tags
Return values
bool —True when the file exists with a known size.
getCredentials()
Returns the configured login credentials.
public
getCredentials() : FtpCredentials
Return values
FtpCredentials —The credentials holder.
getHost()
Returns the configured remote host.
public
getHost() : string
Return values
string —The host name or IP address.
getMaxRetries()
Returns the configured maximum number of connection attempts.
public
getMaxRetries() : int
Return values
int —The retry ceiling.
getPort()
Returns the configured control-channel port.
public
getPort() : int
Return values
int —The port number.
getRoot()
Returns the configured remote root directory.
public
getRoot() : string
Return values
string —The root directory, or an empty string when none is set.
getTimeout()
Returns the configured connection timeout.
public
getTimeout() : int
Return values
int —The timeout, in seconds.
getTransferMode()
Returns the default transfer mode applied to file operations.
public
getTransferMode() : string
Return values
string —One of the FtpTransferMode constants.
isConnected()
Indicates whether a connection is currently open.
public
isConnected() : bool
Return values
bool —True when the client is connected.
isPassive()
Indicates whether passive mode is enabled.
public
isPassive() : bool
Return values
bool —True when passive mode is used.
isSecure()
Indicates whether the transport is secured (FTPS).
public
isSecure() : bool
Return values
bool —True when TLS is used.
lastModified()
Returns the last-modified time of a remote file, as a Unix timestamp.
public
lastModified(string $remoteFile) : int
Not every server supports the underlying MDTM command.
Parameters
- $remoteFile : string
-
The remote path.
Tags
Return values
int —The Unix timestamp.
listFiles()
Returns the structured entries of a directory.
public
listFiles([string $directory = '.' ]) : array<int, FtpFile>
Prefers the MLSD listing when the server supports it; otherwise falls back to
parsing the raw ls -l output.
Parameters
- $directory : string = '.'
-
The directory to list (defaults to the current directory).
Tags
Return values
array<int, FtpFile> —The structured entries.
listNames()
Returns the names of the entries in a directory.
public
listNames([string $directory = '.' ]) : array<int, string>
Parameters
- $directory : string = '.'
-
The directory to list (defaults to the current directory).
Tags
Return values
array<int, string> —The entry names.
parentDirectory()
Moves up to the parent directory.
public
parentDirectory() : static
Tags
Return values
static —This instance, for chaining.
rawList()
Returns the raw, server-formatted listing of a directory.
public
rawList([string $directory = '.' ][, bool $recursive = false ]) : array<int, string>
Parameters
- $directory : string = '.'
-
The directory to list (defaults to the current directory).
- $recursive : bool = false
-
Whether to recurse into sub-directories.
Tags
Return values
array<int, string> —The raw listing lines.
removeDirectory()
Removes a remote directory.
public
removeDirectory(string $directory) : static
Parameters
- $directory : string
-
The directory to remove.
Tags
Return values
static —This instance, for chaining.
rename()
Renames or moves a remote file or directory.
public
rename(string $from, string $to) : static
Parameters
- $from : string
-
The current path.
- $to : string
-
The new path.
Tags
Return values
static —This instance, for chaining.
size()
Returns the size of a remote file, in bytes.
public
size(string $remoteFile) : int
Parameters
- $remoteFile : string
-
The remote path.
Tags
Return values
int —The size in bytes.
upload()
Uploads a local file to the server.
public
upload(string $localFile, string $remoteFile[, string|null $mode = null ]) : static
Parameters
- $localFile : string
-
The source path on the local filesystem.
- $remoteFile : string
-
The destination path on the server.
- $mode : string|null = null
-
The transfer mode; defaults to the client's configured mode.
Tags
Return values
static —This instance, for chaining.
uploadEncrypted()
Encrypts a local file and uploads the ciphertext to the server.
public
uploadEncrypted(string $localFile, string $remoteFile, string $passphrase) : static
Parameters
- $localFile : string
-
The plaintext source on the local filesystem.
- $remoteFile : string
-
The destination path on the server.
- $passphrase : string
-
The passphrase used to derive the encryption key.
Tags
Return values
static —This instance, for chaining.
waitBeforeRetry()
Pauses between two connection attempts. Isolated so tests can override it without changing the retry logic.
protected
waitBeforeRetry(int $seconds) : void
Parameters
- $seconds : int
-
The number of seconds to wait.
Tags
applyRoot()
Changes into the configured root directory, if any, right after connecting.
private
applyRoot() : void
Tags
assertLocalFile()
Asserts that a local file exists and is readable.
private
assertLocalFile(string $localFile) : void
Parameters
- $localFile : string
-
The local path.
Tags
ensureConnected()
Asserts that the client holds an open connection.
private
ensureConnected() : void
Shared by the file and directory operations.
Tags
establish()
Performs a single connect + authenticate sequence.
private
establish() : void
Tags
initializeConfig()
Reads the configuration array into the connection state.
private
initializeConfig(array<string|int, mixed> $init) : void
Parameters
- $init : array<string|int, mixed>
-
The configuration keyed by Ftp constants.
resolveTransferMode()
Resolves a transfer-mode string to its `ext-ftp` resource value.
private
resolveTransferMode(string|null $mode) : int
Parameters
- $mode : string|null
-
The requested mode, or null to use the configured default.
Return values
int —Either FTP_ASCII or FTP_BINARY.
temporaryCryptoFile()
Creates a temporary file used to hold ciphertext during a secure transfer.
private
temporaryCryptoFile() : string
Tags
Return values
string —The temporary file path.