ホームページ  >  記事  >  バックエンド開発  >  PHP ファイルアップロードクラスを共有する

PHP ファイルアップロードクラスを共有する

WBOY
WBOYオリジナル
2016-07-25 08:52:07824ブラウズ
  1. //------------------------------------------ --
  2. // ファイル説明: ファイルアップロード処理クラス
  3. // ファイル作成者: Jesse Lee
  4. // 作成者のホームページ: http://bbs.it-home.org
  5. // 最終更新日: 2011-5-14
  6. / /- ----------------------------------
  7. クラスのアップロード {
  8. var $dir; // 物理的な添付ファイルが保存されるディレクトリ
  9. var $time; // カスタマイズされたファイルのアップロード時間
  10. var $field; // アップロード コントロール名
  11. var $maxsize; KB
  12. var $thumb_width; //サムネイルの幅
  13. var $thumb_height; // ウォーターマーク画像のアドレス
  14. var $watermark_pos; // ウォーターマークの透明度
  15. 構築関数
  16. //$types: アップロードが許可されているファイルの種類、$maxsize: 許可されているサイズ、$field: アップロード コントロール名、$time: カスタマイズされたアップロード時間
  17. function Upload($types = 'jpg|png', $maxsize = 1024 , $field = 'attach', $time = '') {
  18. $this->allow_types =explode('|',$types);
  19. $this->maxsize = $maxsize * 1024;
  20. $this - >field = $field;
  21. $this->time = $time ? $time : time();
  22. }
  23. //ファイルを保存する特定のディレクトリを設定および作成します
  24. //$basedir: ベース ディレクトリ,物理パスである必要があります
  25. //$filedir: カスタム サブディレクトリ、使用可能なパラメータ {y}、{m}、{d}
  26. function set_dir($basedir,$filedir = '') {
  27. $dir = $basedir;
  28. !is_dir ( $dir) && @mkdir($dir,0777);
  29. if (!empty($filedir)) {
  30. $filedir = str_replace(array('{y}','{m}','{y}' ) 、array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strto lower($ filedir ));
  31. $dirs =explode('/',$filedir);
  32. foreach ($dirs as $d) {
  33. !empty($d) && $dir .= $d.'/';
  34. !is_dir ( $dir) && @mkdir($dir,0777);
  35. }
  36. }
  37. $this->dir = $dir;
  38. }
  39. //画像のサムネイル設定、サムネイルが生成されない場合は設定する必要はありません
  40. // $ width: サムネイルの幅, $height: サムネイルの高さ
  41. function set_thumb ($width = 0, $height = 0) {
  42. $this->thumb_width = $width;
  43. $this->thumb_height = $height;
  44. }
  45. //画像のウォーターマーク設定、ウォーターマークが生成されない場合は設定不要
  46. //$file: ウォーターマーク画像, $pos: ウォーターマークの位置, $trans: ウォーターマークの透明度
  47. function set_watermark ($file, $pos = 6, $trans = 80) {
  48. $this->watermark_file = $file;
  49. $this->watermark_pos = $pos;
  50. $this->watermark_trans = $trans;
  51. }
  52. /*-------- -------------------------------------------------- ------
  53. ファイルのアップロードを実行し、処理後にアップロードの成功または失敗を含むファイル情報の配列を返します。
  54. その内: name は、アップロードが成功した場合、ファイル名です。アップロードが失敗した場合、これはローカル ファイル名です。
  55. dir は、添付ファイルをサーバーに保存するための物理パスです。
  56. サイズは、添付ファイルのサイズです。アップロードが失敗した場合、この値は存在しません。
  57. フラグはステータス識別子です。1 は成功を意味し、-1 はファイル タイプが許可されていないことを意味し、-2 はファイル サイズが超過していることを意味します。 ------------------------------------ --------------- -------- */
  58. functionexecute() {
  59. $files = array(); //ファイル情報のアップロードに成功しました
  60. $field = $this->field;
  61. $keys = array_keys($_FILES[ $field]['name']);
  62. foreach ($keys as $key) {
  63. if (!$_FILES[$field]['name' ][$key]) continue;
  64. $fileext = $this- >fileext($_FILES[$field]['name'][$key]); //ファイル拡張子を取得します
  65. $filename = $this- >time.mt_rand(100,999).'.'.$fileext; //ファイル名を生成します
  66. $filedir = $this->dir //添付ファイルが保存される実際のディレクトリ
  67. $filesize = $_FILES[$field][' size'][$key] //ファイルサイズ
  68. ;
  69. //ファイルタイプは許可されていません
  70. if (!in_array($fileext,$this->allow_types)) {
  71. $files[$key]['name'] = $_FILES[$field]['name'][ $key];
  72. $files[$key]['flag'] = -1;
  73. continue;
  74. }
  75. //ファイルサイズを超えました
  76. if ($filesize > ; $this->maxsize) {
  77. $files[ $key]['name'] = $_FILES[$field]['name'][$key];
  78. $files[$key]['flag'] = -2;
  79. 続行;
  80. }
  81. $files[$key]['name'] = $filename;
  82. $files[$key]['dir'] = $filedir;
  83. $files[$key]['size'] = $filesize;
  84. / /アップロードしたファイルを保存し、一時ファイルを削除します
  85. if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
  86. move_uploaded_file($_FILES[$field]['tmp_name'][$key]) ], $filedir.$filename);
  87. @unlink($_FILES[$field]['tmp_name'][$key]);
  88. $files[$key]['flag'] = 1;
  89. //画像を追加透かしを入れてサムネイルを生成します
  90. if (in_array($fileext,array('jpg','png','gif'))) {
  91. if ($this->thumb_width) {
  92. if ($this->create_thumb ( $filedir.$filename,$filedir.'thumb_'.$filename)) {
  93. $files[$key]['thumb'] = 'thumb_'.$filename; //サムネイルファイル名
  94. }
  95. }
  96. $this ->create_watermark($filedir.$filename);
  97. }
  98. }
  99. }
  100. return $files;
  101. }
  102. //サムネイルを作成し、同じ拡張子のサムネイルを生成します
  103. //Php.aspx_file: ソース画像のパス、$thumb_file : サムネイルのパス
  104. function create_thumb (Php.aspx_file,$thumb_file) {
  105. $t_width = $this->thumb_width;
  106. $t_height = $this->thumb_height;
  107. if (!file_exists(Php .aspx_file)) return false ;
  108. Php.aspx_info = getImageSize(Php.aspx_file);
  109. // ソース画像がサムネイル以下の場合、ソース画像をサムネイルとしてコピーします
  110. if (Php.aspx_info[0] $t_height = ($t_width / Php.aspx_info[0]) * Php.aspx_info[1];
  111. } else {
  112. $t_width = ($t_height / Php.aspx_info[1]) * Php.aspx_info[0];
  113. }
  114. //ファイル拡張子を取得します
  115. $fileext = $this->fileext(Php.aspx_file) ;
  116. switch ($fileext) {
  117. case 'jpg' :
  118. Php.aspx_img = ImageCreateFromJPEG(Php.aspx_file); ブレーク;
  119. case 'png' :
  120. Php.aspx_img = ImageCreateFromPNG(Php.aspx_file); :
  121. Php.aspx_img = ImageCreateFromGIF(Php.aspx_file); Break;
  122. }
  123. //トゥルーカラーのサムネイル画像を作成します
  124. $thumb_img = @ImageCreateTrueColor($t_width,$t_height);
  125. //ImageCopyResampled 関数 コピーされた画像の方が優れています滑らかさ、
  126. if (function_exists('imagecopyresampled')) {
  127. @ImageCopyResampled($thumb_img,Php.aspx_img,0,0,0,0,$t_width,$t_height,Php.aspx_info[ 0],Php. aspx_info[1]);
  128. } else {
  129. @ImageCopyResize($thumb_img,Php.aspx_img,0,0,0,0,$t_width,$t_height,Php.aspx_info[0],Php.aspx_info [1]);
  130. }
  131. //サムネイルを生成します
  132. switch ($fileext) {
  133. case 'jpg' :
  134. ImageJPEG($thumb_img,$thumb_file) Break;
  135. case 'gif' :
  136. ImageGIF($thumb_img, $thumb_file);
  137. case 'png' :
  138. ImagePNG($thumb_img,$thumb_file); Break;
  139. }
  140. //一時画像を破棄します
  141. @ImageDestroy(Php.aspx_img);
  142. @ImageDestroy($thumb_img);
  143. return true;
  144. }
  145. //画像にウォーターマークを追加します
  146. //$file: ウォーターマークを入れるファイル
  147. function create_watermark ($file) {
  148. //ファイルが存在しない場合に戻ります
  149. if (!file_exists($this->watermark_file) || ! file_exists($file)) return;
  150. if (!function_exists('getImageSize')) return;
  151. //GD でサポートされているファイル形式を確認します
  152. $gd_allow_types = array();
  153. if (function_exists('ImageCreateFromGIF) ')) $ gd_allow_types['image/gif'] = 'ImageCreateFromGIF';
  154. if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
  155. if (function_exists('ImageCreateFromJPEG') ) $gd_allow_types[ 'image/jpeg'] = 'ImageCreateFromJPEG';
  156. //ファイル情報を取得
  157. $fileinfo = getImageSize($file);
  158. $wminfo = getImageSize($this->watermark_file);
  159. if ($fileinfo [0] < ; $wminfo[0] || $fileinfo[1] < $wminfo[1]) return;
  160. if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
  161. if (array_key_exists) $wminfo[' mime'],$gd_allow_types)) {
  162. // ファイルから画像を作成
  163. $temp = $gd_allow_types[$fileinfo['mime']]($file);
  164. $temp_wm = $gd_allow_types[$wminfo ['mime' ]]($this->watermark_file);
  165. //ウォーターマークの位置
  166. switch ($this->watermark_pos) {
  167. case 1 : //左上
  168. $dst_x = 0; $dst_y = 0; Break;
  169. ケース 2: //中央上
  170. $dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = 0; Break;
  171. ケース 3: //右上
  172. $dst_x = $ fileinfo[0 ]; $dst_y = 0; ブレーク;
  173. ケース 4 : //左下
  174. $dst_y = $fileinfo[1];
  175. ケース 5 : //下中央
  176. $dst_x = ( $fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1]; ブレーク;
  177. ケース 6: // 右下
  178. $dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1]; ブレーク;
  179. デフォルト : //ランダム
  180. $dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); ,$ fileinfo[1]-$wminfo[1]);
  181. }
  182. if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True) //画像ブレンドモードを設定します
  183. if (function_exists('ImageSaveAlpha') ) ImageSaveAlpha($temp_wm,True); //完全なアルファ チャネル情報を保存します
  184. //画像にウォーターマークを追加します
  185. if (function_exists('imageCopyMerge')) {
  186. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y) ,0 ,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
  187. } else {
  188. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo) [0 ],$wminfo[1]);
  189. }
  190. //画像を保存
  191. switch ($fileinfo['mime']) {
  192. case 'image/jpeg' :
  193. @imageJPEG($temp,$file);
  194. ブレーク;
  195. ケース 'image/png' :
  196. @imagePNG($temp,$file);
  197. ブレーク;
  198. ケース 'image/gif' :
  199. @imageGIF($temp,$file);
  200. ブレーク;
  201. }
  202. //ゼロ時間画像を破棄します
  203. @imageDestroy($temp);
  204. @imageDestroy($temp_wm);
  205. }
  206. }
  207. }
  208. //ファイル拡張子を取得します
  209. function fileext($filename) {
  210. return strto lower(substr(strrchr) ($filename ,'.'),1,10));
  211. }
  212. }
  213. ?>
コードをコピー

使用例:

  1. if ($_GET['action'] == 'save') {
  2. $up = new Upload();
  3. $up->set_dir(dirname(__FILE__). '/upload/','{y}/{m}');
  4. $up->set_thumb(100,80);
  5. $up->set_watermark(dirname(__FILE__).'/jblog/images/watermark .png',6,90);
  6. $fs = $up->execute();
  7. var_dump($fs);
  8. }
  9. ?>
  10. test
复制代コード


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。