Home Backend Development PHP Tutorial Summarize three methods of php multi-file upload

Summarize three methods of php multi-file upload

Jun 24, 2017 pm 02:55 PM
php upload introduce document method

Introducing three methods of multi- file upload. The first two are to directly traverse the three-dimensional super global array $_FILES. The last one is to first define a single file upload function and then call the function in a loop. Complete the upload of multiple files.

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

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

1.当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,

  也即表单为这种形式:

<!--lang:html-->

<form action="" method="post" enctype="multipart/form-data">

    <input type="hidden" name="MAX_FILE_SIZE"    value="">

    <input type="file" name="pic[]" /><br><br>

    <input type="file" name="pic[]" /><br><br>

    <input type="file" name="pic[]" /><br><br>

    <input type="file" name="pic[]" /><br><br>

    <input type="submit" value="upload"/>

</form>

可用foreach 循环 上传多个文件:

//1.获取要上传文件的信息

$up_info=$_FILES[&#39;pic&#39;];

 

$ob_path="../system";  

 

$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型

 

 

for($i=0;$i<count($up_info[&#39;name&#39;]);$i++){        //foreach 循环处理多个文件上传

//2.判断文件是否上传错误

 

if($up_info[&#39;error&#39;][$i]>0){

    switch($up_info[&#39;error&#39;][$i]){

        case 1:

            $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

            break;

        case 2:

            $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

            break;

        case 3:

            $err_info="文件只有部分被上传";

            break;

        case 4:

            $err_info="没有文件被上传";

            break;

        case 6:

            $err_info="找不到临时文件夹";

            break;

        case 7:

            $err_info="文件写入失败";

            break;

        default:

            $err_info="未知的上传错误";

            break;

    }

    continue($err_info);

}

 

 

//3.判断文件上传的类型是否合法

 

if(!in_array($up_info[&#39;type&#39;][$i],$typelist)){

    continue(&#39;文件类型错误!&#39;.$up_info[&#39;type&#39;][$i]);

}

 

//4.上传文件的大小过滤

 

if($up_info[&#39;size&#39;][$i]>1000000){

    continue(&#39;文件大小超过1000000&#39;);

}

 

 

//5.上传文件名处理

 

$exten_name=pathinfo($up_info[&#39;name&#39;][$i],PATHINFO_EXTENSION);

 

    do{

        $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));        

        $new_name=$main_name.&#39;.&#39;.$exten_name;

    }while(file_exists($to_path.&#39;/&#39;.$new_name));

 

 

 

//6.判断是否是上传的文件,并执行上传

 

if(is_uploaded_file($up_info[&#39;tmp_name&#39;][$i])){

 

        if(move_uploaded_file($up_info[&#39;tmp_name&#39;][$i],$ob_path.&#39;/&#39;.$new_name)){

            echo &#39;文件上传成功!&#39;;

            }else{

            echo &#39;上传文件移动失败!&#39;;

            }

    }else{

        echo &#39;文件不是上传的文件&#39;;

        }

 

}   //for循环的括号

 

 

 

2.当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时,

  也即表单为这种形式:

 

<form action="" method="post" enctype="multipart/form-data">

    <input type="hidden" name="MAX_FILE_SIZE"    value="">

    <input type="file" name="pic" /><br><br>

    <input type="file" name="text" /><br><br>

    <input type="file" name="doc" /><br><br>

    <input type="file" name="pdf" /><br><br>

 

    <input type="submit" value="upload"/>

 

</form>

 

 

 

 

也可用foreach 循环 上传多个文件:

 

//1.获取要上传文件的信息

$up_info=$_FILES;

 

$ob_path="..\system";  

 

$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型

 

 

 

foreach($up_info as $k_name=>$value){   //用foreach循环 处理多个文件的上传

//2.判断文件是否上传错误

 

if($up_info[$k_name][&#39;error&#39;]>0){

    switch($up_info[&#39;error&#39;][$i]){

        case 1:

            $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

            break;

        case 2:

            $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

            break;

        case 3:

            $err_info="文件只有部分被上传";

            break;

        case 4:

            $err_info="没有文件被上传";

            break;

        case 6:

            $err_info="找不到临时文件夹";

            break;

        case 7:

            $err_info="文件写入失败";

            break;

        default:

            $err_info="未知的上传错误";

            break;

    }

    continue($err_info);

}

 

 

//3.判断文件上传的类型是否合法

 

if(!in_array($up_info[$k_name][&#39;type&#39;],$typelist)){

    continue(&#39;文件类型错误!&#39;.$up_info[$k_name][&#39;type&#39;]);

}

 

//4.上传文件的大小过滤

 

if($up_info[$k_name][&#39;size&#39;]>100000){

    echo &#39;文件大小超过**&#39;;

    continue;

}

 

 

//5.上传文件名处理

 

$exten_name=pathinfo($up_info[$k_name][&#39;name&#39;],PATHINFO_EXTENSION);

 

    do{

        $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));        

        $new_name=$main_name.&#39;.&#39;.$exten_name;

    }while(file_exists($to_path.&#39;/&#39;.$new_name));

 

 

//6.判断是否是上传的文件,并执行上传

 

if(is_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;])){

 

        if(move_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;],$ob_path.&#39;/&#39;.$new_name)){

            echo &#39;文件上传成功!&#39;;

            }else{

            echo &#39;上传文件移动失败!&#39;;

            }

    }else{

        echo &#39;文件不是上传的文件&#39;;

        }

 

}   //for循环的括号

 

 

 

//3.上面的循环是嵌入到文件上传的代码中的,可能有点不好理解,这儿提供第三种法,

//先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,

//也可以到达多文件上传的目的,而且这种方式,更容易理解。

 

//上传的表单的形式和第二种方法中的相同,即:

 

 

    <form action="" method="post" enctype="multipart/form-data">

        <input type="hidden" name="MAX_FILE_SIZE" value="">

        <input type="file" name="pic1" ><br>            

        <input type="file" name="pic2"><br>

        <input type="file" name="pic3"><br>

        <input type="submit" value="upload">

    </form>

 

//定义函数如下:

 

/*

 *单文件上传函数

 *@param array $up_info   记录上传文件信息的超全局数组

 *@param string $to_path  上传文件的目标路径

 *@param array $typlist   允许的文件类型

 *@param int    $file_size允许的文件大小

 *@return string 上传失败,返回失败的原因,

 *

 *                成功返回包括文件名的路径。

 */

 

 

function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){

 

    //1.判断文件上传是否错误

 

    if($up_file[&#39;error&#39;]>0){

        switch($up_info[&#39;error&#39;]){

            case 1:

                $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

                break;

            case 2:

                $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

                break;

            case 3:

                $err_info="文件只有部分被上传";

                break;

            case 4:

                $err_info="没有文件被上传";

                break;

            case 6:

                $err_info="找不到临时文件夹";

                break;

            case 7:

                $err_info="文件写入失败";

                break;

            default:

                $err_info="未知的上传错误";

                break;

        }

 

        return $err_info;

        die();

    }

 

 

    //2.判断上传文件类型是否合法

 

    if(count($typelist)>0){

        if(!in_array($up_info[&#39;type&#39;],$typelist)){

 

            $err_info=&#39;文件类型不合法!&#39;.$up_info[&#39;type&#39;];

            return $err_info;

            die();

        }

    }

 

    //4.判断上传文件大小是否超出允许值

 

    if($up_info[&#39;size&#39;]>$file_size){

 

        return $err_info=&#39;文件大小超过&#39;.$file_size;

        die();

}

 

    //5.上传文件重命名

 

    $exten_name=pathinfo($up_info[&#39;name&#39;],PATHINFO_EXTENSION);

 

    do{

        $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));        

        $new_name=$main_name.&#39;.&#39;.$exten_name;

    }while(file_exists($to_path.&#39;/&#39;.$new_name));

 

 

 

    //6.判断是否是上传的文件,并移动文件

 

    if(is_uploaded_file($up_info[&#39;tmp_name&#39;])){

 

        if(move_uploaded_file($up_info[&#39;tmp_name&#39;],$to_path.&#39;/&#39;.$new_name)){

 

                $err_info=$to_path.&#39;/&#39;.$new_name;

            return     $err_info;            

            die();

            }else{

 

            return $err_info=&#39;上传文件移动失败!&#39;;

            die();

 

                }

    }else{

 

            return $err_info=&#39;这个文件不是上传文件!&#39;;

            die();

    }

 

}

 

 

//函数使用方法如下

 

$multi_info=$_FILES//接收$_FILES的全部上传信息

 

$to_path=&#39;system&#39;;      //上传文件的目标路径    

 

foreach($multi_info as $name=>$up_info){      //foreach 遍历$multi_info 

 

    $err_info=upload_fun($up_info,$to_path);  //调用单文件上传函数

 

    p($err_info);                              //输出返回信息;

 

}

Copy after login

The above is the detailed content of Summarize three methods of php multi-file upload. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

In this chapter, we are going to learn the following topics related to routing ?

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP Creating Validators CakePHP Creating Validators Sep 10, 2024 pm 05:26 PM

Validator can be created by adding the following two lines in the controller.

See all articles