FTP (File Transfer Protocol) - протокол передачи файлов. Работа с FTP-сервером в PHP включает несколько основных действий: установление соединения, аутентификация, выполнение операций с файлами и директориями, и закрытие соединения. В PHP для работы с FTP используются встроенные функции.
1. Установка FTP соединения
Функция ftp_connect в PHP используется для установления соединения с FTP-сервером. Она возвращает идентификатор соединения FTP при успешном соединении и FALSE в случае ошибки.
# $host: Адрес FTP-сервера.
# $port: Порт сервера, по умолчанию 21.
# $timeout: Время ожидания соединения в секундах. По умолчанию 90 секунд.
$ftpConnection = ftp_connect( $host, $port, $timeout );
if( $ftpConnection )
{
echo "Соединение с FTP-сервером успешно установлено.";
# Попытка входа
if( ftp_login( $ftpConnection, $ftpUser, $ftpPassword ) )
{
echo "Авторизация на FTP-сервере успешна.";
}
else
{
echo "Ошибка авторизации.";
}
# Закрытие соединения
ftp_close( $ftpConnection );
}
else
{
echo "Не удалось установить соединение с FTP-сервером.";
}
1.1. Установка зашифрованного FTPS (FTP Secure) соединения
$ftpConnection = ftp_ssl_connect( $host );
if( $ftpConnection )
{
echo "Зашифрованное соединение с FTP-сервером успешно установлено.";
# ...
}
else
{
echo "Не удалось установить зашифрованное соединение с FTP-сервером.\n";
}
2. Загрузка файла на FTP-сервер:
$localFile = "local_file.txt";
$remoteFile = "remote_file.txt";
# Установка активного или пассивного режима передачи данных
# - В пассивном режиме (рекомендуется) сервер открывает порт для передачи данных
# - В активном режиме клиент открывает порт, что может быть блокировано фаерволами
ftp_pasv( $ftpConnection, true );
# Загрузка файла
if( ftp_put( $ftpConnection, $remoteFile, $localFile, FTP_BINARY ) )
{
echo "Файл успешно загружен.";
}
else
{
echo "Ошибка при загрузке файла.";
}
3. Скачивание файла с FTP-сервера:
$remoteFile = "remote_file.txt";
$localFile = "downloaded_file.txt";
# Скачивание файла
if( ftp_get( $ftpConnection, $localFile, $remoteFile, FTP_BINARY ) )
{
echo "Файл успешно скачан.";
}
else
{
echo "Ошибка при скачивании файла.\n";
}
4. Смена директории на FTP-сервере:
$directory = "/path/to/directory";
# Смена директории
if( ftp_chdir( $ftpConnection, $directory ) )
{
echo "Текущая директория изменена на $directory.";
}
else
{
echo "Не удалось изменить директорию.";
}
5. Получение списка файлов в директории::
$directory = "/path/to/directory";
# Получение списка файлов
$files = ftp_nlist( $ftpConnection, $directory );
if( $files !== false )
{
echo "Файлы в директории $directory:";
foreach( $files as $file )
{
echo $file;
}
}
else
{
echo "Не удалось получить список файлов.";
}
Все функции FTP: https://www.php.net/manual/ru/ref.ftp.php
Режимы FTP
FTP использует два режима для установления соединения между Клиентом и Сервером: активный (Active Mode) и пассивный (Passive Mode). Оба режима используются для передачи данных, но они работают немного по-разному.
Активный режим
Инициация соединения: Клиент открывает соединение с сервером на стандартном порту FTP (21).
Команды на сервер: Клиент отправляет команду PORT, указывая серверу порт, на который следует подключиться для передачи данных.
Открытие порта для данных: Клиент открывает порт и ожидает соединения от сервера.
Соединение сервера с клиентом: Сервер инициирует соединение с клиентом на указанный порт для передачи данных.
Проблемы с файерволами: Так как сервер инициирует соединение с клиентом, могут возникнуть проблемы с файерволами и NAT на стороне клиента.
Пассивный режим
Инициация соединения: Клиент подключается к серверу на стандартном порту FTP (21).
Запрос на пассивное соединение: Клиент отправляет команду PASV, указывая серверу, что клиент будет инициировать соединение для передачи данных.
Ответ сервера: Сервер открывает случайный порт и отправляет его номер клиенту.
Соединение клиента с сервером: Клиент инициирует соединение с сервером на указанный порт для передачи данных.
Лучшая совместимость: Пассивный режим чаще используется, так как он лучше совместим с файерволами и NAT на стороне клиента.
Комментарии
0Нашли ошибку или хотите дополнить материал?