为了实现网站程序和图片资源分离,决定在网站上传图片的时候,直接通过ftp的形式上传到图片服务器。经过一番折腾后,终于在本地测试成功。高兴的把代码上传Linux服务器后执行却发现上传到ftp服务器的图片都是0kb,很是烦恼。
经过检查发现在调用ftp_put时总是返回false,说明ftp传输文件时出现了错误。猜测是服务器防火墙的问题,于是用命令systemctl stop firewalld 直接关闭了防火墙,然后测试,文件上传成功。
可是关闭防火墙对服务器总不是那么安全。然后用通过查看php文档对ftp上传相关的描述,发现ftp上传是有主动模式和被动模式区分的。默认是用的主动模式,这时我们只需要使用ftp_pasv函数来开启被动模式即可。这样就不用关闭服务器的防火墙了。
其实问题的所在就是客户端的防火墙没有开放ftp主动模式需要的端口,如果真的需要使用主动模式,将客户端和服务端的相关端口打开也是可以的。