我需要连接到远程系统来获取一些文件。远程系统的规格提到:
需要的协议是SFTP——SSH文件传输协议 端口号是 22
首先,我使用我的 FTP 客户端应用程序尝试使用给定的凭据登录到新服务器。
起初我(按照系统的规格)使用 SFTP over SSH 连接类型并且确实工作正常。
我研究了如何在 PHP 中使用 SFTP over SSH 访问远程资源,我得到了 ssh2 命令集......但是我的服务器没有安装 ssh2 命令,我也不熟悉如何进一步处理它在列出和下载远程文件等方面(我习惯于简单的
ftp_connect()
,ftp_login()
和ftp_nlist()
命令)...
所以我在我的 FTP 客户端应用程序中尝试了其他选项,发现尽管有新系统的规格,它也可以使用 FTP 使用显式 SSL(Auth SSL) 和 FTP 使用显式 SSL(Auth TLS) 连接类型连接良好(唯一的区别是,在那些情况下,我会弹出一个窗口,要求我接受并存储远程证书。当然,我也有一个远程文件列表......
所以,我研究了在 PHP 中使用显式 SSL 的 FTP 连接的实现,并得到了
ftp_ssl_connect()
命令,它可以直接替代 ftp_connect()
。所以我认为我的代码中的任何其他内容都可以保持不变......但令我失望的是我无法使用 ftp_nlist()
命令获取远程文件列表(我得到的是布尔值 false)。
所以让我给你我使用的命令列表,以及控制台中显示的结果:
$conn = ftp_ssl_connect( $ftp_address );
$login = ftp_login( $conn, $ftp_username, $ftp_password );
$files = ftp_nlist( $conn, '.' );
var_dump( $conn );
var_dump( $login );
var_dump( $files );
返回
resource(4250) of type (FTP Buffer)
bool(true)
bool(false)
我之前也尝试过使用被动模式
ftp_nlist()
,像这样:
$conn = ftp_ssl_connect( $ftp_address );
$login = ftp_login( $conn, $ftp_username, $ftp_password );
ftp_pasv( $conn, true );
$files = ftp_nlist( $conn, '.' );
var_dump( $conn );
var_dump( $login );
var_dump( $files );
返回一个
PHP Warning: ftp_nlist(): php_connect_nonb() failed: Permission denied (13) in
有人能告诉我为什么
ftp_nlist()
在连接本身成功时失败,并给我一个如何处理这个问题的建议吗? TIA!