美文网首页
Php Ftp 上传文件和下载 2022-05-06

Php Ftp 上传文件和下载 2022-05-06

作者: 阿然学编程 | 来源:发表于2022-05-05 20:48 被阅读0次
    /**
     * Ftp上传文件
     */
    public function ftpUpload()
    {
        ini_set('memory_limit', '-1');//取消内存限制
        set_time_limit(0);//无时间限制可以一直执行到结束
        // 建立基础连接
        // 如果成功返回一个连接标识,失败则返回 FALSE 。
        $ftpUrl = '175.***.***.**';//(这里不能包含 "ftp://" 或者斜线)
        $conn_id = ftp_connect($ftpUrl);//打开 FTP 连接
        if (!$conn_id) {
            return $this->error('FTP基础连接失败!');
        }
        // 登录Ftp 用户名和口令
        $login_result = ftp_login($conn_id, '用户名', '密码');
        // 检查是否登录成功
        // 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果登录失败,PHP 会抛出一个警告。
        if (!$login_result) {
            return $this->error('FTP登录失败!');
        }
        $pwd = ftp_pwd($conn_id);//获取当前目录
        $list = ftp_nlist($conn_id, $pwd);//获取当前目录下所有的目录与文件
        if (!$list) {
            return $this->error('获取当前目录失败');
        }
        $dir_name = date("Ymd");//新目录名
        if (!in_array($pwd . $dir_name, $list)) {
            //创建新目录
            if (!ftp_mkdir($conn_id, $dir_name)) {
                return $this->error('创建' . $dir_name . '目录失败');
            }
        }
        //切换目录
        $chdir = @ftp_chdir($conn_id, $dir_name);
        if (!$chdir) {
            return $this->error('切换' . $dir_name . '目录失败');
        }
        $filePath = realpath('D:\Win10系统默认(不能删)\桌面\test_01.txt'); //待上传的文件地址
        if (!$filePath) {
            return $this->error('上传的文件不存在');
        }
        // 上传文件
        $upload = ftp_put($conn_id, "test_01.txt", $filePath, FTP_ASCII);
        // 检查上传结果
        // 成功时返回 TRUE, 或者在失败时返回 FALSE。
        if (!$upload) {
            $res = '上传失败!';
        } else {
            $res = '上传成功!';
        }
        // 关闭 FTP 流
        ftp_close($conn_id);
        return $this->error($res);
    }

    /**
     * Ftp下载文件
     */
    public function ftpDowlond()
    {
        ini_set('memory_limit', '-1');//取消内存限制
        set_time_limit(0);//无时间限制可以一直执行到结束
        // 建立基础连接
        // 如果成功返回一个连接标识,失败则返回 FALSE 。
        $ftpUrl = '175.***.***.**';//(这里不能包含 "ftp://" 或者斜线)
        $conn_id = ftp_connect($ftpUrl);//打开 FTP 连接
        if (!$conn_id) {
            return $this->error('FTP基础连接失败!');
        }
        // 登录Ftp 用户名和口令
        $login_result = ftp_login($conn_id, '用户名', '密码');
        // 检查是否登录成功
        // 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果登录失败,PHP 会抛出一个警告。
        if (!$login_result) {
            return $this->error('FTP登录失败!');
        }

        $ftp_file_name = 'test_01.txt';//FTP要下载的文件
        $ftp_path = ftp_pwd($conn_id) . date('Ymd');// FTP指定的目录 /20220516
        $chir = @ftp_chdir($conn_id, $ftp_path);//切换到FTP下/20220516目录
        if (!$chir) {
            return $this->error('FTP不存在' . "'$ftp_path'" . '目录!');
        }
        //在当前访问项目中创建临时文件
        $tmpfile = tempnam(getcwd() . "/", "temp");
        if (!$tmpfile) {
            return $this->error('临时文件创建失败');
        }
        // 进行ftp下载
        if (!ftp_get($conn_id, $tmpfile, $ftp_file_name, FTP_BINARY)) {
            return $this->error('下载失败');
        }
        // 关闭 FTP 流
        ftp_close($conn_id);
        //读取临时文件,将其内容写入到输出缓冲(这个不能少不)
        //成功,该函数返回从文件中读入的字节数。如果失败,该函数返回 FALSE 并附带错误信息 '@' 来隐藏错误输出。
        @readfile($tmpfile);
        //clearstatcache();//清除文件状态缓存
        unlink($tmpfile);// 删除临时文件
        //告诉浏览器这是一个文件流格式的文件
        Header("Content-type: application/octet-stream");
        //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
        header("Content-Disposition: attachment; filename=" . $ftp_file_name);
        //告诉浏览器当前页面不进行缓存,每次访问的时间必须从服务器上读取最新的数据
        header('Cache-Control: must-revalidate');
        // 缓存控制
        header('Cache-Control:max-age=0');
        exit();
    }

相关文章

网友评论

      本文标题:Php Ftp 上传文件和下载 2022-05-06

      本文链接:https://www.haomeiwen.com/subject/jjbzyrtx.html