Загрузка файлов по SFTP
70132 просмотра
5 ответа
Я успешно загрузил файлы через FTP, но теперь мне нужно сделать это через SFTP. Я могу успешно подключиться к удаленному серверу, создать файл и записать в него, но я не могу загрузить существующий файл со своего локального сервера на удаленный сервер. Ftp_put не запускается с sftp-соединением?
Мой код используется для записи файла:
//Send file via sftp to server
$strServer = "*****";
$strServerPort = "****";
$strServerUsername = "*****";
$strServerPassword = "*****";
$csv_filename = "Test_File.csv";
//connect to server
$resConnection = ssh2_connect($strServer, $strServerPort);
if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
//Initialize SFTP subsystem
echo "connected";
$resSFTP = ssh2_sftp($resConnection);
$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');
fwrite($resFile, "Testing");
fclose($resFile);
}else{
echo "Unable to authenticate on server";
}
Кто-нибудь имел успех в захвате локального файла и загрузке с помощью метода, такого как выше, с sftp? Пример был бы очень признателен.
Спасибо
Автор: Marc Источник Размещён: 13.11.2019 11:42Ответы (5)
45 плюса
С помощью метода выше (с использованием sftp ) вы можете использовать stream_copy_to_stream :
$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');
$srcFile = fopen("/home/myusername/".$csv_filename, 'r');
$writtenBytes = stream_copy_to_stream($srcFile, $resFile);
fclose($resFile);
fclose($srcFile);
Вы также можете попробовать использовать ssh2_scp_send
Автор: dev-null-dweller Размещён: 05.03.2012 07:3525 плюса
Лично я предпочитаю избегать расширения PECL SSH2. Мой предпочтительный подход включает phpseclib, чистую реализацию PHP SFTP . Вот пример с phpseclib 2.0 (требуется композитор):
<?php
require __DIR__ . '/vendor/autoload.php';
use phpseclib\Net\SFTP;
$sftp = new SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}
$sftp->put('remote.ext', 'local.ext', SFTP::SOURCE_LOCAL_FILE);
?>
Вот тот же пример с phpseclib 1.0:
<?php
include('Net/SFTP.php');
$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}
$sftp->put('remote.ext', 'local.ext', NET_SFTP_LOCAL_FILE);
?>
Одна из важных вещей, которые мне нравятся в phpseclib по сравнению с расширением PECL, это то, что он переносим. Возможно расширение PECL работает на одной версии Linux, но не на другой. И на общих хостах это почти никогда не работает, потому что это почти никогда не устанавливается.
phpseclib также, на удивление, быстрее . И если вам нужно подтверждение, что файл загружен, вы можете использовать встроенное ведение журнала phpseclib в качестве доказательства.
Автор: neubert Размещён: 06.03.2012 05:2912 плюса
Для меня это сработало:
$connection = ssh2_connect($server, $serverPort);
if(ssh2_auth_password($connection, $serverUser, $serverPassword)){
echo "connected\n";
ssh2_scp_send($connection, "/path/to/local/".$file, "/path/to/remote/".$file);
echo "done\n";
} else {
echo "connection failed\n";
}
Сначала мне пришлось установить libssh2-php:
sudo apt-get install libssh2-php
Автор: Matthias
Размещён: 07.01.2015 01:51
4 плюса
Для простого Документа phpseclib, чистой реализации PHP SFTP .
См. Следующую ссылку:
Загрузка файлов через SFTP с использованием PHP
Структура папки:
Main Folder->
my-files(Contain File Which Transfer To Remote Server)
phpseclib0.3.0
sftp.php
Автор: Sandesh
Размещён: 03.09.2014 06:06
1 плюс
Обмениваясь дополнительными входными данными, обнаружил, что ssh2_scp_send не копирует должным образом (байты были разными), когда при копировании файла из Linux (64-разрядная версия) в Windows (32-разрядная версия) процедура sftp работала отлично. При использовании Windows с stfp путь в случае C: \ to \ path должен быть указан как ssh2.sftp: // {$ resSFTP} / cygdrive / c / to / path, если Cygwin используется для SSH на коробке Windows ,
Автор: pradosh nair Размещён: 22.08.2013 06:18Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- php How can I find unused functions in a PHP project
- php Эффективное изменение размера JPEG изображения в PHP
- php MySQL или PDO - каковы плюсы и минусы?
- php Как бы вы внедрили аутентификацию на основе FORM без резервной базы данных?
- php Самый простой способ профилировать скрипт PHP
- php Изображения в PHP
- sftp SFTP библиотеки для .NET
- sftp Не удается заставить SFTP работать в PHP
- sftp Клиент SSH Парамико с SFTP
- sftp Загрузка / загрузка файла с сервера sftp на iphone
- sftp Как сделать SFTP с PHP?
- sftp ssh tunneling for sftp or GUI
- sftp Перенос файлов в / из сеанса Вход в систему с PuTTY
- sftp командная строка sftp: адрес электронной почты как имя пользователя
- sftp Как я могу синхронизировать локальный проект Eclipse с удаленным сервером через SFTP / SSH / FTP?
- sftp JSchException: сбой согласования алгоритма