Загрузка файлов с помощью SFTP

Я успешно загрузил файлы поверх 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? Примером может служить большая оценка.

благодаря

С помощью метода выше (с участием 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

Лично я предпочитаю избегать расширения PECL SSH2. Мой предпочтительный подход включает phpseclib, чистую реализацию PHP SFTP . например.

 <?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); ?> в <?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 как доказательство.

Для меня это сработало:

 $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 

Для простого документа phpseclib – чистой реализации PHP SFTP .

См. Ссылку:

Загрузка файлов через SFTP с помощью PHP

Структура папок:

 Main Folder-> my-files(Contain File Which Transfer To Remote Server) phpseclib0.3.0 sftp.php 

При совместном использовании дополнительных ресурсов найдено, что ssh2_scp_send не копировался должным образом (байты были разными) при копировании файла из Linux (64-разрядная версия) в Windows (32 бит), там работала sftp. При использовании Windows с stfp путь в случае C: \ to \ path должен быть помещен как ssh2.sftp: // {$ resSFTP} / cygdrive / c / to / path, если Cygwin используется для SSH в окне Windows ,