我需要连接到远程系统以获取一些文件。远程系统的规格提到:
所需的协议是 SFTP - SSH 文件传输协议
端口号是22
首先,我使用 FTP 客户端应用程序尝试使用给定的凭据登录新服务器。
起初我(遵循系统的规格)使用了通过 SSH 进行 SFTP连接类型确实工作得很好。
我研究了如何在 PHP 中使用 SFTP 通过 SSH 访问远程资源,并且我得到了 ssh2 命令集...但是我的服务器没有安装 ssh2 命令,我也不熟悉如何进一步处理它列出和下载远程文件等的条款(我习惯于简单地ftp_connect()
, ftp_login()
and ftp_nlist()
命令)...
因此,我在 FTP 客户端应用程序中尝试了其他选项,发现尽管有新系统的规格,但使用它可以很好地连接使用显式 SSL (Auth SSL) 的 FTP and 使用显式 SSL (Auth TLS) 的 FTP连接类型也(唯一的区别是,在这些情况下,我收到一个弹出窗口,要求我接受并存储远程证书。当然,我也得到了远程文件的列表......
于是,我研究了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()
连接本身成功时失败,并给我一个关于如何处理这个问题的建议?蒂亚!