当前位置: 首页 > 工具软件 > FTP for PHP > 使用案例 >

PHP的ftp文件,多文件上传操作类

闻人梓
2023-12-01

原文博客地址http://www.xiegaosheng.com/post/view?id=97;

PHP针对ftp文件的操作方法,如果是只操作一个ftp,可以使用里面的单利模式,

不需要每次都去实例化,我的项目中需要去链接很多个ftp服务器;

所以需要多次去连接和关闭;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

<?php

/**

 * Created by PhpStorm.

 * ftp的文件操作类

 * User: xiaoxie

 * Date: 2018/5/7

 * Time: 17:44

 **/

 

namespace App\Tools;

 

 

class FtpFile

{

    static private $_instance=null;

     private $ftp = null;

     public $off;             // 返回操作状态(成功/失败)

 

    //私有的构造方法

    public  function __construct($config){

        //实例化

       $this->ftp = @ftp_connect($config['ftp_ip'],$config['ftp_port']) or die("FTP connection fail");

       //登录验证

       @ftp_login($this->ftp,$config['ftp_username'],$config['ftp_password']);

       //是否开启被动模式

        if (isset($config['ftp_pasv']))

        {

            @ftp_pasv($this->ftp,true);

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: getInstance

     * Description:公有的静态方法

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @return FtpFile|null

     *

     */

    static public function getInstance($config){

        if(!(self::$_instance instanceof self)){

            self::$_instance new FtpFile($config);

        }

        return self::$_instance;

    }

 

    /**

     * Created by PhpStorm.

     * function: up_file

     * Description:上传文件

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param $path 本地路径

     * @param $newpath  若目标目录不存在则新建

     * @param bool $type

     *

     */

    function up_file($path,$newpath,$type=true)

    {

        if($type$this->dir_mkdirs($newpath);

        $this->off = @ftp_put($this->ftp,$newpath,$path,FTP_BINARY);

        if(!$this->off)

        {

            return "文件上传失败,请检查权限及路径是否正确!";

        }else{

            //删除文件

            unlink($path);

            return true;

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: uploadFile

     * Description:多文件上传

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param array $files

     * @param bool $type

     * @return bool|void

     *

     */

    public function uploadFile($files=[],$type=true)

    {

        if (is_array($files))

        {

            foreach ($files as $key=>$file)

            {

                if($type)

                {

                    $this->dir_mkdirs($file);

                }

                $this->off = @ftp_put($this->ftp,$file,$key,FTP_BINARY);

                if(!$this->off)

                {

                     logs('ftp.txt',date('Y-m-d H:i:s').$file."文件上传错误");

                }else{

                    //删除文件

                    unlink($key);

                   // return true;

                }

            }

        }

        if(!$this->off)

        {

            //logs函数自定义日志

            logs('ftp.txt',date('Y-m-d H:i:s').$file."文件上传错误");

            return false;

        }else{

            return true;

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: move_file

     * Description:移动文件 修改文件名

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param $path 原路径

     * @param $newpath 若目标目录不存在则新建

     * @param bool $type

     *

     */

    function move_file($path,$newpath,$type=true)

    {

        if($type$this->dir_mkdirs($newpath);

        $this->off = @ftp_rename($this->ftp,$path,$newpath);

        if(!$this->off) {

            return "文件移动失败,请检查权限及原路径是否正确!";

        }else{

            return true;

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: copy_file

     * Description:复制文件

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param $path原路径

     * @param $newpath 新路径

     * @param bool $type 若目标目录不存在则新建

     *

     */

    function copy_file($path,$newpath,$type=true)

    {

        $downpath "/var/www/temp.txt";

        $this->off = @ftp_get($this->ftp,$downpath,$path,FTP_BINARY);// 下载 

        if(!$this->off) 

        {

            return "文件复制失败,请检查权限及原路径是否正确!";

        }

        $this->up_file($downpath,$newpath,$type);

    }

 

    /**

     * Created by PhpStorm.

     * function: del_file

     * Description:删除文件

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param $path

     *

     */

    function del_file($path)

    {

        $this->off = @ftp_delete($this->ftp,$path);

        if(!$this->off){

            return false;

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: dir_mkdirs

     * Description:生成目录

     * User: Xiaoxie

     * Email 736214763@qq.com

     * @param $path 路径

     *

     */

    function dir_mkdirs($path)

    {

        $path_arr explode('/',$path);       // 取目录数组 

        $file_name array_pop($path_arr);      // 弹出文件名

        $path_div count($path_arr);        // 取层数 

 

        foreach($path_arr as $val)          // 创建目录 

        {

            if(@ftp_chdir($this->ftp,$val) == FALSE)

            {

                $tmp = @ftp_mkdir($this->ftp,$val);

                if($tmp == FALSE)

                {

                     

                    exit;

                }

                @ftp_chdir($this->ftp,$val);

            }

        }

 

        for($i=1;$i<=$path_div;$i++)         // 回退到根 

        {

            @ftp_cdup($this->ftp);

        }

    }

 

    /**

     * Created by PhpStorm.

     * function: close

     * Description:关闭链接

     * User: Xiaoxie

     * Email 736214763@qq.com

     *

     */

    public function close()

    {

        @ftp_close($this->ftp);

    }

 

    /**

     * 关闭链接

     *单例模式打开析构方法

     */

 

    public function __destruct()

    {

        // TODO: Implement __destruct() method.

        //@ftp_close($this->ftp);

    }

 

}

 

lavarel中直接调用;

单例模式调用:

1

FtpFile::getInstance($this->data)->up_file($location_file,$remote_file);

不是单例模式调用;

1

2

3

$ftp new FtpFile($this->data);

$ftp->uploadFile($filearr);

$ftp->close();

 类似资料: