我使用下面的代码↓连接到FTP服务器并获取文件列表。它可以在我的本地机器(windows)上正常工作,但不在生产环境(运行centos)上,其中ftp_nlist方法返回false。
$ftpInfo = array('directory' => 'xxx.com', 'user' => 'xxx', 'password' => 'xxx', 'port' => 21, 'timeout' => 30); $connectionId = ftp_connect($ftpInfo['directory'], $ftpInfo['port'], $ftpInfo['timeout']); $loginResult = ftp_login($connectionId, $ftpInfo['user'], $ftpInfo['password']); $files = ftp_nlist($connectionId, '.'); var_dump($files); ftp_close($connectionId);
返回我机器上的文件数组,输出时返回false。
在这两种情况下,它设法连接和登录并成功。
var_dump($loginResult);
返回:
bool(true)
解决办法 :
与服务器的防火墙配置有关。登录后切换到被动模式,它工作正常。
ftp_pasv($connectionId, true);
文件所在的服务器 配置的是被动模式 所以要切换到被动模式下 连接
ftp_pasv() 函数把被动模式设置为打开或关闭。
在被动模式中,数据连接是由客户机来初始化的,而不是服务器。这在客户机位于防火墙之后时比较有用。
这样就可以了