亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Rumah pembangunan bahagian belakang tutorial php PHP圖片上傳類;支持水印-日期文件夾-生成縮略圖 ,支持多文件上傳

PHP圖片上傳類;支持水印-日期文件夾-生成縮略圖 ,支持多文件上傳

Jul 25, 2016 am 08:46 AM

可以用{Y}{m}{n}來變成現(xiàn)在的日期
  1. set_dir(dirname(__FILE__).'/upload/','{y}/{m}'); //保存路徑,支持{y}{m}wjcelcm34c這幾個(gè)選項(xiàng)
  2. $up->set_thumb(100,80); //縮略圖大小設(shè)置.單位為像素
  3. $up->set_watermark(dirname(__FILE__).'/jblog/images/watermark.png',6,90); //水印設(shè)置
  4. $fs = $up->execute(); //開始執(zhí)行
  5. var_dump($fs); //測試用 查看類的情況
  6. }
  7. ?>
  8. /////視圖表單---------
  9. test
  10. //支持多張圖片上傳
  11. */
  12. class upload {
  13. var $dir; //附件存放物理目錄
  14. var $time; //自定義文件上傳時(shí)間
  15. var $allow_types; //允許上傳附件類型
  16. var $field; //上傳控件名稱
  17. var $maxsize; //最大允許文件大小,單位為KB
  18. var $thumb_width; //縮略圖寬度
  19. var $thumb_height; //縮略圖高度
  20. var $watermark_file; //水印圖片地址
  21. var $watermark_pos; //水印位置
  22. var $watermark_trans;//水印透明度
  23. //構(gòu)造函數(shù)
  24. //$types : 允許上傳的文件類型 , $maxsize : 允許大小 , $field : 上傳控件名稱 , $time : 自定義上傳時(shí)間
  25. function upload($types = 'jpg|png', $maxsize = 1024, $field = 'attach', $time = '') {
  26. $this->allow_types = explode('|',$types);
  27. $this->maxsize = $maxsize * 1024;
  28. $this->field = $field;
  29. $this->time = $time ? $time : time();
  30. }
  31. //設(shè)置并創(chuàng)建文件具體存放的目錄
  32. //$basedir : 基目錄,必須為物理路徑
  33. //$filedir : 自定義子目錄,可用參數(shù){y}、{m}、wjcelcm34c
  34. function set_dir($basedir,$filedir = '') {
  35. $dir = $basedir;
  36. !is_dir($dir) && @mkdir($dir,0777);
  37. if (!empty($filedir)) {
  38. $filedir = str_replace(array('{y}','{m}','wjcelcm34c'),array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strtolower($filedir));//用string_replace把{y} {m} wjcelcm34c幾個(gè)標(biāo)簽進(jìn)行替換
  39. $dirs = explode('/',$filedir);
  40. foreach ($dirs as $d) {
  41. !empty($d) && $dir .= $d.'/';
  42. !is_dir($dir) && @mkdir($dir,0777);
  43. }
  44. }
  45. $this->dir = $dir;
  46. }
  47. //圖片縮略圖設(shè)置,如果不生成縮略圖則不用設(shè)置
  48. //$width : 縮略圖寬度 , $height : 縮略圖高度
  49. function set_thumb ($width = 0, $height = 0) {
  50. $this->thumb_width = $width;
  51. $this->thumb_height = $height;
  52. }
  53. //圖片水印設(shè)置,如果不生成添加水印則不用設(shè)置
  54. //$file : 水印圖片 , $pos : 水印位置 , $trans : 水印透明度
  55. function set_watermark ($file, $pos = 6, $trans = 80) {
  56. $this->watermark_file = $file;
  57. $this->watermark_pos = $pos;
  58. $this->watermark_trans = $trans;
  59. }
  60. /*—————————————————————-
  61. 執(zhí)行文件上傳,處理完返回一個(gè)包含上傳成功或失敗的文件信息數(shù)組,
  62. 其中:name 為文件名,上傳成功時(shí)是上傳到服務(wù)器上的文件名,上傳失敗則是本地的文件名
  63. dir 為服務(wù)器上存放該附件的物理路徑,上傳失敗不存在該值
  64. size 為附件大小,上傳失敗不存在該值
  65. flag 為狀態(tài)標(biāo)識,1表示成功,-1表示文件類型不允許,-2表示文件大小超出
  66. —————————————————————–*/
  67. function execute() {
  68. $files = array(); //成功上傳的文件信息
  69. $field = $this->field;
  70. $keys = array_keys($_FILES[$field]['name']);
  71. foreach ($keys as $key) {
  72. if (!$_FILES[$field]['name'][$key]) continue;
  73. $fileext = $this->fileext($_FILES[$field]['name'][$key]); //獲取文件擴(kuò)展名
  74. $filename = date('Ymdhis',$this->time).mt_rand(10,99).'.'.$fileext; //生成文件名
  75. $filedir = $this->dir; //附件實(shí)際存放目錄
  76. $filesize = $_FILES[$field]['size'][$key]; //文件大小
  77. //文件類型不允許
  78. if (!in_array($fileext,$this->allow_types)) {
  79. $files[$key]['name'] = $_FILES[$field]['name'][$key];
  80. $files[$key]['flag'] = -1;
  81. continue;
  82. }
  83. //文件大小超出
  84. if ($filesize > $this->maxsize) {
  85. $files[$key]['name'] = $_FILES[$field]['name'][$key];
  86. $files[$key]['name'] = $filesize;
  87. $files[$key]['flag'] = -2;
  88. continue;
  89. }
  90. $files[$key]['name'] = $filename;
  91. $files[$key]['dir'] = $filedir;
  92. $files[$key]['size'] = $filesize;
  93. //保存上傳文件并刪除臨時(shí)文件
  94. if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
  95. move_uploaded_file($_FILES[$field]['tmp_name'][$key],$filedir.$filename);
  96. @unlink($_FILES[$field]['tmp_name'][$key]);
  97. $files[$key]['flag'] = 1;
  98. //對圖片進(jìn)行加水印和生成縮略圖,這里演示只支持jpg和png(gif生成的話會(huì)沒了幀的)
  99. if (in_array($fileext,array('jpg','png'))) {
  100. if ($this->thumb_width) {
  101. if ($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)) {
  102. $files[$key]['thumb'] = 'thumb_'.$filename; //縮略圖文件名
  103. }
  104. }
  105. $this->create_watermark($filedir.$filename);
  106. }
  107. }
  108. }
  109. return $files;
  110. }
  111. //創(chuàng)建縮略圖,以相同的擴(kuò)展名生成縮略圖
  112. //$src_file : 來源圖像路徑 , $thumb_file : 縮略圖路徑
  113. function create_thumb ($src_file,$thumb_file) {
  114. $t_width = $this->thumb_width;
  115. $t_height = $this->thumb_height;
  116. if (!file_exists($src_file)) return false;
  117. $src_info = getImageSize($src_file);
  118. //如果來源圖像小于或等于縮略圖則拷貝源圖像作為縮略圖,免去操作
  119. if ($src_info[0] if (!copy($src_file,$thumb_file)) {
  120. return false;
  121. }
  122. return true;
  123. }
  124. //按比例計(jì)算縮略圖大小
  125. if (($src_info[0]-$t_width) > ($src_info[1]-$t_height)) {
  126. $t_height = ($t_width / $src_info[0]) * $src_info[1];
  127. } else {
  128. $t_width = ($t_height / $src_info[1]) * $src_info[0];
  129. }
  130. //取得文件擴(kuò)展名
  131. $fileext = $this->fileext($src_file);
  132. switch ($fileext) {
  133. case 'jpg' :
  134. $src_img = ImageCreateFromJPEG($src_file); break;
  135. case 'png' :
  136. $src_img = ImageCreateFromPNG($src_file); break;
  137. case 'gif' :
  138. $src_img = ImageCreateFromGIF($src_file); break;
  139. }
  140. //創(chuàng)建一個(gè)真彩色的縮略圖像
  141. $thumb_img = @ImageCreateTrueColor($t_width,$t_height);
  142. //ImageCopyResampled函數(shù)拷貝的圖像平滑度較好,優(yōu)先考慮
  143. if (function_exists('imagecopyresampled')) {
  144. @ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
  145. } else {
  146. @ImageCopyResized($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
  147. }
  148. //生成縮略圖
  149. switch ($fileext) {
  150. case 'jpg' :
  151. ImageJPEG($thumb_img,$thumb_file); break;
  152. case 'gif' :
  153. ImageGIF($thumb_img,$thumb_file); break;
  154. case 'png' :
  155. ImagePNG($thumb_img,$thumb_file); break;
  156. }
  157. //銷毀臨時(shí)圖像
  158. @ImageDestroy($src_img);
  159. @ImageDestroy($thumb_img);
  160. return true;
  161. }
  162. //為圖片添加水印
  163. //$file : 要添加水印的文件
  164. function create_watermark ($file) {
  165. //文件不存在則返回
  166. if (!file_exists($this->watermark_file) || !file_exists($file)) return;
  167. if (!function_exists('getImageSize')) return;
  168. //檢查GD支持的文件類型
  169. $gd_allow_types = array();
  170. if (function_exists('ImageCreateFromGIF')) $gd_allow_types['image/gif'] = 'ImageCreateFromGIF';
  171. if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
  172. if (function_exists('ImageCreateFromJPEG')) $gd_allow_types['image/jpeg'] = 'ImageCreateFromJPEG';
  173. //獲取文件信息
  174. $fileinfo = getImageSize($file);
  175. $wminfo = getImageSize($this->watermark_file);
  176. if ($fileinfo[0]
  177. if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
  178. if (array_key_exists($wminfo['mime'],$gd_allow_types)) {
  179. //從文件創(chuàng)建圖像
  180. $temp = $gd_allow_types[$fileinfo['mime']]($file);
  181. $temp_wm = $gd_allow_types[$wminfo['mime']]($this->watermark_file);
  182. //水印位置
  183. switch ($this->watermark_pos) {
  184. case 1 : //頂部居左
  185. $dst_x = 0; $dst_y = 0; break;
  186. case 2 : //頂部居中
  187. $dst_x = ($fileinfo[0] - $wminfo[0])/2; $dst_y = 0; break;
  188. case 3 : //頂部居右
  189. $dst_x = $fileinfo[0]; $dst_y = 0; break;
  190. case 4 : //底部居左
  191. $dst_x = 0; $dst_y = $fileinfo[1]; break;
  192. case 5 : //底部居中
  193. $dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1]; break;
  194. case 6 : //底部居右
  195. $dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1]; break;
  196. default : //隨機(jī)
  197. $dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); $dst_y = mt_rand(0,$fileinfo[1]-$wminfo[1]);
  198. }
  199. if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True); //設(shè)定圖像的混色模式
  200. if (function_exists('ImageSaveAlpha')) ImageSaveAlpha($temp_wm,True); //保存完整的 alpha 通道信息
  201. //為圖像添加水印
  202. if (function_exists('imageCopyMerge')) {
  203. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
  204. } else {
  205. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1]);
  206. }
  207. //保存圖片
  208. switch ($fileinfo['mime']) {
  209. case 'image/jpeg' :
  210. @imageJPEG($temp,$file);
  211. break;
  212. case 'image/png' :
  213. @imagePNG($temp,$file);
  214. break;
  215. case 'image/gif' :
  216. @imageGIF($temp,$file);
  217. break;
  218. }
  219. //銷毀零時(shí)圖像
  220. @imageDestroy($temp);
  221. @imageDestroy($temp_wm);
  222. }
  223. }
  224. }
  225. //獲取文件擴(kuò)展名
  226. function fileext($filename) {
  227. return strtolower(substr(strrchr($filename,'.'),1,10));
  228. }
  229. }
  230. ?>
復(fù)制代碼

圖片上傳, PHP
本主題由 小貝 于 2015-11-18 08:23 移動(dòng)


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

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Bagaimana menggabungkan dua nilai PHP Arrays yang unik? Bagaimana menggabungkan dua nilai PHP Arrays yang unik? Jul 02, 2025 pm 05:18 PM

Untuk menggabungkan dua susunan PHP dan menyimpan nilai unik, terdapat dua kaedah utama. 1. Untuk tatasusunan indeks atau hanya deduplikasi, gunakan Array_Merge dan Array_unique Combinations: First Gabungan Array_Merge ($ array1, $ array2) dan kemudian gunakan array_unique () untuk deduplikasi mereka untuk akhirnya mendapatkan array baru yang mengandungi semua nilai unik; 2. Untuk array bersekutu dan ingin mengekalkan pasangan nilai utama dalam array pertama, gunakan pengendali: $ hasil = $ array1 $ array2, yang akan memastikan bahawa kunci dalam array pertama tidak akan ditimpa oleh array kedua. Kedua -dua kaedah ini boleh digunakan untuk senario yang berbeza, bergantung kepada sama ada nama kunci dikekalkan atau hanya fokus yang dihadapi

php regex untuk kekuatan kata laluan php regex untuk kekuatan kata laluan Jul 03, 2025 am 10:33 AM

Untuk menentukan kekuatan kata laluan, perlu menggabungkan pemprosesan biasa dan logik. Keperluan asas termasuk: 1. Panjang tidak kurang daripada 8 digit; 2. Sekurang -kurangnya mengandungi huruf kecil, huruf besar, dan nombor; 3. Sekatan watak khas boleh ditambah; Dari segi aspek lanjutan, duplikasi berterusan aksara dan urutan tambahan/penurunan perlu dielakkan, yang memerlukan pengesanan fungsi PHP; Pada masa yang sama, senarai hitam harus diperkenalkan untuk menapis kata laluan lemah yang biasa seperti kata laluan dan 123456; Akhirnya, disyorkan untuk menggabungkan perpustakaan ZXCVBN untuk meningkatkan ketepatan penilaian.

Bagaimana cara mengendalikan fail memuat naik dengan selamat di PHP? Bagaimana cara mengendalikan fail memuat naik dengan selamat di PHP? Jul 08, 2025 am 02:37 AM

Untuk mengendalikan muat naik fail PHP dengan selamat, anda perlu mengesahkan sumber dan jenis, mengawal nama fail dan laluan, menetapkan sekatan pelayan, dan memproses fail media dua kali. 1. Sahkan sumber muat naik untuk mengelakkan CSRF melalui token dan mengesan jenis mime sebenar melalui finfo_file menggunakan kawalan putih; 2. Namakan semula fail ke rentetan rawak dan tentukan pelanjutan untuk menyimpannya dalam direktori bukan web mengikut jenis pengesanan; 3. Konfigurasi PHP mengehadkan saiz muat naik dan direktori sementara Nginx/Apache melarang akses ke direktori muat naik; 4. Perpustakaan GD menyambung semula gambar -gambar untuk membersihkan data yang berpotensi.

Skop pembolehubah PHP dijelaskan Skop pembolehubah PHP dijelaskan Jul 17, 2025 am 04:16 AM

Masalah dan penyelesaian biasa untuk skop pembolehubah PHP termasuk: 1. Pembolehubah global tidak dapat diakses dalam fungsi, dan ia perlu diluluskan menggunakan kata kunci atau parameter global; 2. Pembolehubah statik diisytiharkan dengan statik, dan ia hanya dimulakan sekali dan nilai dikekalkan antara pelbagai panggilan; 3. Pembolehubah hyperglobal seperti $ _get dan $ _post boleh digunakan secara langsung dalam mana -mana skop, tetapi anda perlu memberi perhatian kepada penapisan yang selamat; 4. Fungsi Anonymous perlu memperkenalkan pembolehubah skop induk melalui kata kunci penggunaan, dan apabila mengubah suai pembolehubah luaran, anda perlu lulus rujukan. Menguasai peraturan ini boleh membantu mengelakkan kesilapan dan meningkatkan kestabilan kod.

Mengulas kod dalam php Mengulas kod dalam php Jul 18, 2025 am 04:57 AM

Terdapat tiga kaedah umum untuk kod komen PHP: 1. Use // atau # untuk menyekat satu baris kod, dan disyorkan untuk menggunakan //; 2. Gunakan /.../ untuk membungkus blok kod dengan pelbagai baris, yang tidak boleh bersarang tetapi boleh diseberang; 3. Komen -komen kemahiran gabungan seperti menggunakan / jika () {} / untuk mengawal blok logik, atau untuk meningkatkan kecekapan dengan kunci pintasan editor, anda harus memberi perhatian kepada simbol penutupan dan mengelakkan bersarang apabila menggunakannya.

Petua untuk menulis komen php Petua untuk menulis komen php Jul 18, 2025 am 04:51 AM

Kunci untuk menulis komen PHP adalah untuk menjelaskan tujuan dan spesifikasi. Komen harus menjelaskan "mengapa" dan bukannya "apa yang dilakukan", mengelakkan redundansi atau terlalu kesederhanaan. 1. Gunakan format bersatu, seperti docblock (/*/) untuk deskripsi kelas dan kaedah untuk meningkatkan keserasian dan keserasian alat; 2. Menekankan sebab -sebab di sebalik logik, seperti mengapa JS melompat perlu dikeluarkan secara manual; 3. Tambahkan gambaran keseluruhan gambaran sebelum kod kompleks, terangkan proses dalam langkah -langkah, dan membantu memahami idea keseluruhan; 4. Gunakan Todo dan Fixme secara rasional untuk menandakan item dan masalah untuk memudahkan penjejakan dan kerjasama berikutnya. Anotasi yang baik dapat mengurangkan kos komunikasi dan meningkatkan kecekapan penyelenggaraan kod.

Bagaimana penjana berfungsi dalam php? Bagaimana penjana berfungsi dalam php? Jul 11, 2025 am 03:12 AM

Ageneratorinphpisamemory-efficientwaytoiterateOverlargedatasetsbyieldingvaluesonateatimeNsteadofreturningthemallatonce.1.GeneratorSuseTheyEldeyWorderWorderToProducevaluuesondemand,

Bagaimana untuk membuat array dalam PHP? Bagaimana untuk membuat array dalam PHP? Jul 02, 2025 pm 05:01 PM

Terdapat dua cara untuk membuat array dalam PHP: Gunakan fungsi array () atau gunakan kurungan []. 1. Menggunakan fungsi array () adalah cara tradisional, dengan keserasian yang baik. Tentukan array indeks seperti $ buah -buahan = array ("epal", "pisang", "oren"), dan array bersekutu seperti $ user = array ("name" => "John", "umur" => 25); 2. Menggunakan [] adalah cara yang lebih mudah untuk menyokong sejak Php5.4, seperti warna $

See all articles