从PHP内SFTP

问题描述 投票:15回答:5

我在建立一个网络应用程序,将,除其他事项外,需要连接到一个FTP服务器下载或上传文件的过程。该应用程序是用PHP编写的,它的托管在Linux服务器上。

我想知道是不管是否有可能也为SFTP服务器提供支持,但在谷歌的一些快速搜索后,似乎这是不是所有的简单。

所以,问题是:什么是使用SFTP从PHP中的最佳方式是什么?有一类也可以为FTP以及SFTP提供支持,使同样的功能,可用于两者兼而有之?

php ftp curl sftp
5个回答
14
投票

是的,你可以做到这一点与cURL。若要从FTP切换到SFTP所有你需要做的就是要改变协议选项形式CURLPROTO_FTPCURLPROTO_SFTP

卷曲支持以下协议:HTTP,HTTPS,FTP,FTPS,SCP,SFTP,TELNET,LDAP,LDAPS,DICT,FILE,TFTP。

BTW。 SFTP不与FTPS混淆。 SFTP是SSH文件传输协议,而FTPS是基于SSL的FTP。


7
投票

如果你没有安装卷曲做(我的主机不),你可以使用phpseclib:

http://phpseclib.sourceforge.net/documentation/net.html#net_sftp


4
投票

如果有人最终了这个页面上。

您也可以使用用PHP PHP Bindings for LIBSSH2。应该适当地安装在系统上。

在Ubuntu 10.04和Debian莱尼,当然具有所有依赖性

apt-get install libssh2-php

3
投票

伊戈尔的建议的问题是,除其他事情,让少得多移植代码(libssh2上没有安装非常多的主机),它有一个更为直观的​​基于面向对象的API和RSA认证实际上是有意义的(libssh2要求您存储的公共密钥和文件系统上的单独的私有密钥;事实上,他们必须分别提供的是愚蠢的,因为大多数私有密钥格式包括在其中的公钥)。

phpseclib也越来越快:

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/#comment_3759


0
投票
$dataFile      = 'PASTE_FILE_NAME_HERE';
$sftpServer    = 'PASTE_SFTP_SERVER_NAME_HERE';
$sftpUsername  = 'PASTE_USERNAME_HERE';
$sftpPassword  = 'PASTE_PASSWORD_HERE';
$sftpPort      = 'PASTE_PORT_HERE';
$sftpRemoteDir = '/';

$ch = curl_init('sftp://' . $sftpServer . ':' . $sftpPort . $sftpRemoteDir . '/' . basename($dataFile));

$fh = fopen($dataFile, 'r');

if ($fh) {
    curl_setopt($ch, CURLOPT_USERPWD, $sftpUsername . ':' . $sftpPassword);
    curl_setopt($ch, CURLOPT_UPLOAD, true);
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
    curl_setopt($ch, CURLOPT_INFILE, $fh);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($dataFile));
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $verbose = fopen('php://temp', 'w+');
    curl_setopt($ch, CURLOPT_STDERR, $verbose);

    $response = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    if ($response) {
        echo "Success";
    } else {
        echo "Failure";
        rewind($verbose);
        $verboseLog = stream_get_contents($verbose);
        echo "Verbose information:\n" . $verboseLog . "\n";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.