Файлы не загружаются на удаленный сервер с Net_SFTP

У меня есть следующий класс для загрузки файлов в каталог, однако первый каталог, который должен быть создан, настраивается как «Файл», а не как «Папка файлов». Из-за этого элементы, которые должны быть загружены, загружаются неправильно. Я не уверен, пропустил ли я шаг или нет, или я настроил это неправильно.

include 'Net/SFTP.php';

class SFTPConnection
{
private $sftp;

public function __construct($host, $username, $password)
{
$this->sftp = new Net_SFTP($host);
if (!$this->sftp)
error_log("Could not connect to $host.");

if (!$this->sftp->login($username, $password))
error_log("Could not authenticate with username $username " .
"and password $password.");
}

public function uploadFiles($dir, $to, $from) {
$result = array();
$toDir = str_replace($from, $to, $dir);
$cdir = scandir($dir);

foreach ($cdir as $key => $value) {
if (!in_array($value, array(".", ".."))) {
if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
if(!$this->sftp->mkdir($toDir . DIRECTORY_SEPARATOR .$value)) {
echo "Could not create directory <br>'";
exit();
}
$result[$value] = $this->uploadFiles($dir . DIRECTORY_SEPARATOR . $value, $to, $from);
} else {
$result[] = $value;
echo "Uploading $dir/$value <br>";
if(!$this->sftp->put($toDir . DIRECTORY_SEPARATOR . $value, $dir . DIRECTORY_SEPARATOR . $value, NET_SFTP_LOCAL_FILE)) {
echo "Could not upload file <br>";
exit();
}
}
}
}
return $result;
}
}

0

Решение

Меня устраивает. Я старался $sftp->mkdir('Test folder') а также $sftp->mkdir('./Test folder/Another folder'), Созданные каталоги были созданы, как и ожидалось.

Одна вещь, чтобы иметь в виду … DIRECTORY_SEPARATOR вероятно, не самая лучшая вещь для использования в этом случае. В Windows, например, DIRECTORY_SEPARATOR не является /. Это проблема, потому что спецификации SFTP говорят, что каталоги должны быть представлены с / — not. квотирование проект-IETF-secsh-filexfer-02:

Этот протокол представляет имена файлов в виде строк. Предполагается, что имена файлов используют косую черту (‘/’) в качестве разделителя каталогов.

Я предполагаю, что для дальнейшего понимания копия журналов SFTP была бы полезна. Может быть, просто предоставить журналы SFTP mkdir операция. Вы можете получить журналы SFTP, выполнив define('NET_SFTP_LOGGING', 2) на вершине, а затем делает echo $sftp->getSFTPLog() после mkdir,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]