php实现ftp上传整个目录下的文件

php实现ftp上传整个目录下的文件

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;
    }
?>

{{collectdata}}

网友评论0