PHP: Работа с FTP-сервером

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 на стороне клиента.

up: 3 г. Просмотров: 1.8k
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram