Как сделать SFTP с PHP? - PullRequest
       30

Как сделать SFTP с PHP?

75 голосов
/ 14 января 2011

Я встречал много PHP-скриптов для веб-FTP-клиентов. Мне нужно реализовать клиент SFTP как веб-приложение на PHP. Поддерживает ли PHP SFTP? Я не мог найти образцы. Кто-нибудь может мне помочь с этим?

Ответы [ 4 ]

69 голосов
/ 14 января 2011

В PHP есть потоковые упаковщики ssh2 (по умолчанию отключены), поэтому вы можете использовать соединения sftp с любой функцией, поддерживающей потоковые упаковщики, используя ssh2.sftp:// для протокола, например,

file_get_contents('ssh2.sftp://user:pass@example.com:22/path/to/filename');

или - когда также используется расширение ssh2

$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

См. http://php.net/manual/en/wrappers.ssh2.php

Кстати, на эту тему уже есть довольно много вопросов:

36 голосов
/ 14 января 2011

Функции ssh2 не очень хороши. Сложный в использовании и сложный для установки, использование их гарантирует, что ваш код будет иметь нулевую переносимость. Я рекомендую использовать phpseclib, чистую реализацию PHP SFTP .

26 голосов
/ 01 мая 2014

Я обнаружил, что "phpseclib" должен помочь вам в этом (SFTP и многие другие функции).http://phpseclib.sourceforge.net/

Чтобы поместить файл на сервер, просто позвоните (пример кода из http://phpseclib.sourceforge.net/sftp/examples.html#put)

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
// puts an x-byte file named filename.remote on the SFTP server,
// where x is the size of filename.local
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE);
0 голосов
/ 29 мая 2013

Я выполнил полный отскок и написал класс, который создает командный файл, а затем вызывает sftp с помощью вызова system.Не самый хороший (или самый быстрый) способ сделать это, но он работает для того, что мне нужно, и он не требует установки дополнительных библиотек или расширений в PHP.

Может быть, если вы неЯ не хочу использовать ssh2 extensions

...