如何使用PHP的SFTP?
我遇到了很多用于Web FTP客户端的PHP脚本。 我需要在PHP中将SFTP客户端实现为Web应用程序。 PHP支持SFTP吗? 我找不到样品。 谁能帮我这个?
PHP有ssh2stream包装器(默认是禁用的),所以你可以使用sftp连接与任何支持stream包装器的函数通过使用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
另外还有一个关于这个话题的问题,
ssh2的function不是很好。 使用起来很难,而且安装起来也很困难,这将保证您的代码具有零可移植性。 我的build议是使用phpseclib,一个纯粹的PHP SFTP实现 。
我发现“phpseclib”应该帮助你(SFTP和更多的function)。 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);
我执行了一个完整的cop-out,写了一个创buildbatch file的类,然后通过system
调用调用sftp
。 不是最好的(或最快)的方法,但它适用于我所需要的,它不需要在PHP中安装额外的库或扩展。
如果你不想使用ssh2
扩展,可能是一个ssh2
Monsta FTP通过免费下载的基于网页的客户端提供SFTP / SCP和普通FTP。 (免责声明:我参与了这个项目)
如果你可以使用PHP的ssh2扩展,我build议检查一下:
在GitHub上识别SFTP客户端