Rumah pembangunan bahagian belakang tutorial php PHP封装的多文件上传类实例与用法详解

PHP封装的多文件上传类实例与用法详解

Nov 27, 2017 am 11:00 AM
php Contoh penggunaan

PHP封装的多文件上传类实例与用法详解,实例讲述了PHP封装的多文件上传类实例与用法。分享给大家供大家参考学习PHP,具体如下:

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

<?php

/**//*

 * @(#)UploadFile.php

 *

 * 可同时处理用户多个上传文件。效验文件有效性后存储至指定目录。

 * 可返回上传文件的相关有用信息供其它程序使用。(如文件名、类型、大小、保存路径)

 * 使用方法请见本类底部(UploadFile类使用注释)信息。

 *

 */

class UploadFile {

 var $user_post_file = array(); //用户上传的文件

 var $save_file_path//存放用户上传文件的路径

 var $max_file_size;   //文件最大尺寸

 var $last_error;   //记录最后一次出错信息

 //默认允许用户上传的文件类型

 var $allow_type = array(&#39;gif&#39;, &#39;jpg&#39;, &#39;png&#39;, &#39;zip&#39;, &#39;rar&#39;, &#39;txt&#39;, &#39;doc&#39;, &#39;pdf&#39;);

 var $final_file_path; //最终保存的文件名

 var $save_info = array(); //返回一组有用信息,用于提示用户。

 /**//**

 * 构造函数,用与初始化相关信息,用户待上传文件、存储路径等

 *

 * @param Array $file 用户上传的文件

 * @param String $path 存储用户上传文件的路径

 * @param Integer $size 允许用户上传文件的大小(字节)

 * @param Array $type  此数组中存放允计用户上传的文件类型

 */

 function UploadFile($file, $path, $size = 2097152, $type = &#39;&#39;) {

 $this->user_post_file = $file;

 $this->save_file_path = $path;

 $this->max_file_size = $size; //如果用户不填写文件大小,则默认为2M.

 if ($type != &#39;&#39;)

  $this->allow_type = $type;

 }

 /**//**

 * 存储用户上传文件,检验合法性通过后,存储至指定位置。

 * @access public

 * @return int  值为0时上传失败,非0表示上传成功的个数。

 */

 function upload() {

 for ($i = 0; $i < count($this->user_post_file[&#39;name&#39;]); $i++) {

  //如果当前文件上传功能,则执行下一步。

  if ($this->user_post_file[&#39;error&#39;][$i] == 0) {

  //取当前文件名、临时文件名、大小、扩展名,后面将用到。

  $name = $this->user_post_file[&#39;name&#39;][$i];

  $tmpname = $this->user_post_file[&#39;tmp_name&#39;][$i];

  $size = $this->user_post_file[&#39;size&#39;][$i];

  $mime_type = $this->user_post_file[&#39;type&#39;][$i];

  $type = $this->getFileExt($this->user_post_file[&#39;name&#39;][$i]);

  //检测当前上传文件大小是否合法。

  if (!$this->checkSize($size)) {

   $this->last_error = "The file size is too big. File name is: ".$name;

   $this->halt($this->last_error);

   continue;

  }

  //检测当前上传文件扩展名是否合法。

  if (!$this->checkType($type)) {

   $this->last_error = "Unallowable file type: .".$type." File name is: ".$name;

   $this->halt($this->last_error);

   continue;

  }

  //检测当前上传文件是否非法提交。

  if(!is_uploaded_file($tmpname)) {

   $this->last_error = "Invalid post file method. File name is: ".$name;

   $this->halt($this->last_error);

   continue;

  }

  //移动文件后,重命名文件用。

  $basename = $this->getBaseName($name, ".".$type);

  //移动后的文件名

  $saveas = $basename."-".time().".".$type;

  //组合新文件名再存到指定目录下,格式:存储路径 + 文件名 + 时间 + 扩展名

  $this->final_file_path = $this->save_file_path."/".$saveas;

  if(!move_uploaded_file($tmpname, $this->final_file_path)) {

   $this->last_error = $this->user_post_file[&#39;error&#39;][$i];

   $this->halt($this->last_error);

   continue;

  }

  //存储当前文件的有关信息,以便其它程序调用。

  $this->save_info[] = array("name" => $name, "type" => $type,

      "mime_type" => $mime_type,

               "size" => $size, "saveas" => $saveas,

               "path" => $this->final_file_path);

  }

 }

 return count($this->save_info); //返回上传成功的文件数目

 }

 /**//**

 * 返回一些有用的信息,以便用于其它地方。

 * @access public

 * @return Array 返回最终保存的路径

 */

 function getSaveInfo() {

 return $this->save_info;

 }

 /**//**

 * 检测用户提交文件大小是否合法

 * @param Integer $size 用户上传文件的大小

 * @access private

 * @return boolean 如果为true说明大小合法,反之不合法

 */

 function checkSize($size) {

 if ($size > $this->max_file_size) {

  return false;

 }

 else {

  return true;

 }

 }

 /**//**

 * 检测用户提交文件类型是否合法

 * @access private

 * @return boolean 如果为true说明类型合法,反之不合法

 */

 function checkType($extension) {

 foreach ($this->allow_type as $type) {

  if (strcasecmp($extension , $type) == 0)

  return true;

 }

 return false;

 }

 /**//**

 * 显示出错信息

 * @param $msg  要显示的出错信息

 * @access private

 */

 function halt($msg) {

 printf("<b><UploadFile Error:></b> %s <br>\n", $msg);

 }

 /**//**

 * 取文件扩展名

 * @param String $filename 给定要取扩展名的文件

 * @access private

 * @return String   返回给定文件扩展名

 */

 function getFileExt($filename) {

 $stuff = pathinfo($filename);

 return $stuff[&#39;extension&#39;];

 }

 /**//**

 * 取给定文件文件名,不包括扩展名。

 * eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong

 *

 * @param String $filename 给定要取文件名的文件

 * @access private

 * @return String 返回文件名

 */

 function getBaseName($filename, $type) {

 $basename = basename($filename, $type);

 return $basename;

 }

}

/**//******************** UploadFile类使用注释

//注意,上传组件name属性不管是一个还是多个都要使用数组形式,如:

<input type="file" name="user_upload_file[]">

<input type="file" name="user_upload_file[]">

//如果用户点击了上传按钮。

if ($_POST[&#39;action&#39;] == "上传") {

 //设置允许用户上传的文件类型。

 $type = array(&#39;gif&#39;, &#39;jpg&#39;, &#39;png&#39;, &#39;zip&#39;, &#39;rar&#39;);

 //实例化上传类,第一个参数为用户上传的文件组、第二个参数为存储路径、

 //第三个参数为文件最大大小。如果不填则默认为2M

 //第四个参数为充许用户上传的类型数组。如果不填则默认为gif, jpg, png, zip, rar, txt, doc, pdf

 $upload = new UploadFile($_FILES[&#39;user_upload_file&#39;], &#39;j:/tmp&#39;, 100000, $type);

 //上传用户文件,返回int值,为上传成功的文件个数。

 $num = $upload->upload();

 if ($num != 0) {

 echo "上传成功<br>";

 //取得文件的有关信息,文件名、类型、大小、路径。用print_r()打印出来。

 print_r($upload->getSaveInfo());

 //格式为: Array

 //  (

 //  [0] => Array(

 //    [name] => example.txt

 //    [type] => txt

 //    [size] => 526

 //    [path] => j:/tmp/example-1108898806.txt

 //    )

 //  )

 echo $num."个文件上传成功";

 }

 else {

 echo "上传失败<br>";

 }

}

*/

?>

Salin selepas log masuk

以上就是 PHP封装的多文件上传类实例与用法详解,解释都在代码里看着很方便,易懂

相关推荐:

PHP文件上传解析

PHP文件上传功能实现代码分享

php文件上传

Atas ialah kandungan terperinci PHP封装的多文件上传类实例与用法详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

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

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

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

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

CakePHP Bekerja dengan Pangkalan Data CakePHP Bekerja dengan Pangkalan Data Sep 10, 2024 pm 05:25 PM

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

See all articles