Как использовать PHP для загрузки файла через протокол SFTP?

  • 22 августа 2023 г. 14:16
Ответы на вопрос 2
Для загрузки файла через протокол SFTP с использованием библиотеки phpseclib вам потребуется выполнить следующие шаги:

1. Установите библиотеку phpseclib, если она еще не установлена. Вы можете использовать Composer для этого, запустив команду `composer require phpseclib/phpseclib`.

2. Подключите файлы библиотеки в вашем коде:

```php
<?php
use phpseclib\NET\SFTP;
require 'vendor/autoload.php';
```

3. Создайте экземпляр класса SFTP и установите соединение с удаленным сервером:

```php
$sftp = new SFTP('hostname');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}
```

Замените `'hostname'`, `'username'` и `'password'` на соответствующие значения вашего сервера.

4. Используйте метод `put` для загрузки файла на удаленный сервер. Укажите путь к локальному файлу и путь к удаленному файлу в аргументах метода:

```php
$sftp->put('remote/path/file.txt', 'local/path/file.txt', SFTP::SOURCE_LOCAL_FILE);
```

Здесь `'remote/path/file.txt'` - путь и имя файла на удаленном сервере, а `'local/path/file.txt'` - путь и имя файла на локальной машине для загрузки.

Пример полного кода:

```php
<?php
use phpseclib\NET\SFTP;
require 'vendor/autoload.php';

$sftp = new SFTP('hostname');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

$sftp->put('remote/path/file.txt', 'local/path/file.txt', SFTP::SOURCE_LOCAL_FILE);
```

Убедитесь, что вы заменили `'hostname'`, `'username'` и `'password'` на соответствующие значения вашего сервера, а `'remote/path/file.txt'` и `'local/path/file.txt'` на пути и имена ваших файлов, соответственно.

Если у вас возникли какие-либо ошибки или проблемы с выполнением кода, убедитесь, что у вас правильно настроен сервер SFTP и что вы передали корректные данные для подключения (хост, имя пользователя, пароль). Также стоит проверить доступы к файлам и права на запись на удаленной машине.
Ошибка заключалась в неправильном указании пути для переменной $remoteUploadDirectory. Вместо указания полного пути до директории, нужно было указать только путь от корневой директории веб-сервера. 

Правильный путь: $remoteUploadDirectory = '/C:/Users/PC/Desktop/tmp/';

Неправильный путь: $remoteUploadDirectory = 'C:/Users/PC/Desktop/tmp/';

Вы обнаружили эту ошибку, когда попытались загрузить файл через командную строку во время повторной попытки. 

Можете использовать пример из документации, чтобы скопировать его в свой код и получить корректный результат.
Похожие вопросы