php实现ftp上传整个目录下的文件
ftp上传单个文件用ftp_put,那么如何上传整个文件夹下的文件,今天了教大家怎么实现,思路如下:
1、扫描本地文件夹获取所有的文件路径放进数组
2、连接ftp服务器
3、循环数组,创建ftp远程路径,并上传本地文件到远程路径
代码实现:
扫描目录下文件
<?php function getsubfilebydir($_dir, $_base = DS, &$_folderdata) { $_dirdata = scandir($_base . $_dir); foreach ($_dirdata as $file) { if (($file != '.') && ($file != '..')) { if (is_dir($_base . $_dir . $file)) { getsubfilebydir($_dir . $file . DS, $_base, $_folderdata); }else{ $_folderdata[] = $_dir . $file; } } } } ?>连接ftp上传
<?php function ftp_uploadfolder($_ftpconf=[],$_local="",$_remote=""){ if(!isset($_ftpconf['host'])||!isset($_ftpconf['user'])||!isset($_ftpconf['pwd'])){ return "连接参数错误"; } $_conn = @ftp_connect($_ftpconf['host'], isset($_ftpconf['port'])?$_ftpconf['port']:21); if (FALSE === $_conn) { return "连接服务器错误"; } // 使用username和password登录 $_authdata = @ftp_login($_conn, $_ftpconf['user'], $_ftpconf['pwd']); if (FALSE === $_authdata) { ftp_quit($_conn); return "账号密码错误"; } $folderdata=[]; getsubfilebydir("", $_local,$folderdata); ftp_chdir($_conn, "/"); if (@ftp_pasv($_conn, isset($_ftpconf['pasv'])?$_ftpconf['pasv']:false)) { foreach ($folderdata as $item){ $remote_dir = dirname($_remote.$item); $path_arr = explode(DS, $remote_dir); foreach ($path_arr as $val) { if (@ftp_chdir($_conn, $val) == FALSE) { $tmp = @ftp_mkdir($_conn, $val); @ftp_chdir($_conn, $val); } } ftp_chdir($_conn, "/"); ftp_put($_conn, $_remote.$item, $_local.$item, FTP_BINARY); } } ftp_quit($_conn); return false; } ?>
网友评论0