-
- //------------------------------------------ --
- // ファイル説明: ファイルアップロード処理クラス
- // ファイル作成者: Jesse Lee
- // 作成者のホームページ: http://bbs.it-home.org
- // 最終更新日: 2011-5-14
- / /- ----------------------------------
- クラスのアップロード {
- var $dir; // 物理的な添付ファイルが保存されるディレクトリ
- var $time; // カスタマイズされたファイルのアップロード時間
- var $field; // アップロード コントロール名
- var $maxsize; KB
- var $thumb_width; //サムネイルの幅
- var $thumb_height; // ウォーターマーク画像のアドレス
- var $watermark_pos; // ウォーターマークの透明度
- 構築関数
- //$types: アップロードが許可されているファイルの種類、$maxsize: 許可されているサイズ、$field: アップロード コントロール名、$time: カスタマイズされたアップロード時間
- function Upload($types = 'jpg|png', $maxsize = 1024 , $field = 'attach', $time = '') {
- $this->allow_types =explode('|',$types);
- $this->maxsize = $maxsize * 1024;
- $this - >field = $field;
- $this->time = $time ? $time : time();
- }
- //ファイルを保存する特定のディレクトリを設定および作成します
- //$basedir: ベース ディレクトリ,物理パスである必要があります
- //$filedir: カスタム サブディレクトリ、使用可能なパラメータ {y}、{m}、{d}
- function set_dir($basedir,$filedir = '') {
- $dir = $basedir;
- !is_dir ( $dir) && @mkdir($dir,0777);
- if (!empty($filedir)) {
- $filedir = str_replace(array('{y}','{m}','{y}' ) 、array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strto lower($ filedir ));
- $dirs =explode('/',$filedir);
- foreach ($dirs as $d) {
- !empty($d) && $dir .= $d.'/';
- !is_dir ( $dir) && @mkdir($dir,0777);
- }
- }
- $this->dir = $dir;
- }
- //画像のサムネイル設定、サムネイルが生成されない場合は設定する必要はありません
- // $ width: サムネイルの幅, $height: サムネイルの高さ
- function set_thumb ($width = 0, $height = 0) {
- $this->thumb_width = $width;
- $this->thumb_height = $height;
- }
- //画像のウォーターマーク設定、ウォーターマークが生成されない場合は設定不要
- //$file: ウォーターマーク画像, $pos: ウォーターマークの位置, $trans: ウォーターマークの透明度
- function set_watermark ($file, $pos = 6, $trans = 80) {
- $this->watermark_file = $file;
- $this->watermark_pos = $pos;
- $this->watermark_trans = $trans;
- }
- /*-------- -------------------------------------------------- ------
- ファイルのアップロードを実行し、処理後にアップロードの成功または失敗を含むファイル情報の配列を返します。
- その内: name は、アップロードが成功した場合、ファイル名です。アップロードが失敗した場合、これはローカル ファイル名です。
- dir は、添付ファイルをサーバーに保存するための物理パスです。
- サイズは、添付ファイルのサイズです。アップロードが失敗した場合、この値は存在しません。
- フラグはステータス識別子です。1 は成功を意味し、-1 はファイル タイプが許可されていないことを意味し、-2 はファイル サイズが超過していることを意味します。 ------------------------------------ --------------- -------- */
- functionexecute() {
- $files = array(); //ファイル情報のアップロードに成功しました
- $field = $this->field;
- $keys = array_keys($_FILES[ $field]['name']);
- foreach ($keys as $key) {
- if (!$_FILES[$field]['name' ][$key]) continue;
-
- $fileext = $this- >fileext($_FILES[$field]['name'][$key]); //ファイル拡張子を取得します
- $filename = $this- >time.mt_rand(100,999).'.'.$fileext; //ファイル名を生成します
- $filedir = $this->dir //添付ファイルが保存される実際のディレクトリ
- $filesize = $_FILES[$field][' size'][$key] //ファイルサイズ
- ;
- //ファイルタイプは許可されていません
- if (!in_array($fileext,$this->allow_types)) {
- $files[$key]['name'] = $_FILES[$field]['name'][ $key];
- $files[$key]['flag'] = -1;
- continue;
- }
- //ファイルサイズを超えました
- if ($filesize > ; $this->maxsize) {
- $files[ $key]['name'] = $_FILES[$field]['name'][$key];
- $files[$key]['flag'] = -2;
- 続行;
- }
- $files[$key]['name'] = $filename;
- $files[$key]['dir'] = $filedir;
- $files[$key]['size'] = $filesize;
- / /アップロードしたファイルを保存し、一時ファイルを削除します
- if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
- move_uploaded_file($_FILES[$field]['tmp_name'][$key]) ], $filedir.$filename);
- @unlink($_FILES[$field]['tmp_name'][$key]);
- $files[$key]['flag'] = 1;
- //画像を追加透かしを入れてサムネイルを生成します
- if (in_array($fileext,array('jpg','png','gif'))) {
- if ($this->thumb_width) {
- if ($this->create_thumb ( $filedir.$filename,$filedir.'thumb_'.$filename)) {
- $files[$key]['thumb'] = 'thumb_'.$filename; //サムネイルファイル名
- }
- }
- $this ->create_watermark($filedir.$filename);
- }
- }
- }
- return $files;
- }
- //サムネイルを作成し、同じ拡張子のサムネイルを生成します
- //Php.aspx_file: ソース画像のパス、$thumb_file : サムネイルのパス
- function create_thumb (Php.aspx_file,$thumb_file) {
- $t_width = $this->thumb_width;
- $t_height = $this->thumb_height;
- if (!file_exists(Php .aspx_file)) return false ;
- Php.aspx_info = getImageSize(Php.aspx_file);
- // ソース画像がサムネイル以下の場合、ソース画像をサムネイルとしてコピーします
- if (Php.aspx_info[0] $t_height = ($t_width / Php.aspx_info[0]) * Php.aspx_info[1];
- } else {
- $t_width = ($t_height / Php.aspx_info[1]) * Php.aspx_info[0];
- }
- //ファイル拡張子を取得します
- $fileext = $this->fileext(Php.aspx_file) ;
- switch ($fileext) {
- case 'jpg' :
- Php.aspx_img = ImageCreateFromJPEG(Php.aspx_file); ブレーク;
- case 'png' :
- Php.aspx_img = ImageCreateFromPNG(Php.aspx_file); :
- Php.aspx_img = ImageCreateFromGIF(Php.aspx_file); Break;
- }
- //トゥルーカラーのサムネイル画像を作成します
- $thumb_img = @ImageCreateTrueColor($t_width,$t_height);
- //ImageCopyResampled 関数 コピーされた画像の方が優れています滑らかさ、
- if (function_exists('imagecopyresampled')) {
- @ImageCopyResampled($thumb_img,Php.aspx_img,0,0,0,0,$t_width,$t_height,Php.aspx_info[ 0],Php. aspx_info[1]);
- } else {
- @ImageCopyResize($thumb_img,Php.aspx_img,0,0,0,0,$t_width,$t_height,Php.aspx_info[0],Php.aspx_info [1]);
- }
- //サムネイルを生成します
- switch ($fileext) {
- case 'jpg' :
- ImageJPEG($thumb_img,$thumb_file) Break;
- case 'gif' :
- ImageGIF($thumb_img, $thumb_file);
- case 'png' :
- ImagePNG($thumb_img,$thumb_file); Break;
- }
- //一時画像を破棄します
- @ImageDestroy(Php.aspx_img);
- @ImageDestroy($thumb_img);
- return true;
- }
- //画像にウォーターマークを追加します
- //$file: ウォーターマークを入れるファイル
- function create_watermark ($file) {
- //ファイルが存在しない場合に戻ります
- if (!file_exists($this->watermark_file) || ! file_exists($file)) return;
- if (!function_exists('getImageSize')) return;
-
- //GD でサポートされているファイル形式を確認します
- $gd_allow_types = array();
- if (function_exists('ImageCreateFromGIF) ')) $ gd_allow_types['image/gif'] = 'ImageCreateFromGIF';
- if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
- if (function_exists('ImageCreateFromJPEG') ) $gd_allow_types[ 'image/jpeg'] = 'ImageCreateFromJPEG';
- //ファイル情報を取得
- $fileinfo = getImageSize($file);
- $wminfo = getImageSize($this->watermark_file);
- if ($fileinfo [0] < ; $wminfo[0] || $fileinfo[1] < $wminfo[1]) return;
- if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
- if (array_key_exists) $wminfo[' mime'],$gd_allow_types)) {
-
- // ファイルから画像を作成
- $temp = $gd_allow_types[$fileinfo['mime']]($file);
- $temp_wm = $gd_allow_types[$wminfo ['mime' ]]($this->watermark_file);
- //ウォーターマークの位置
- switch ($this->watermark_pos) {
- case 1 : //左上
- $dst_x = 0; $dst_y = 0; Break;
- ケース 2: //中央上
- $dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = 0; Break;
- ケース 3: //右上
- $dst_x = $ fileinfo[0 ]; $dst_y = 0; ブレーク;
- ケース 4 : //左下
- $dst_y = $fileinfo[1];
- ケース 5 : //下中央
- $dst_x = ( $fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1]; ブレーク;
- ケース 6: // 右下
- $dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1]; ブレーク;
- デフォルト : //ランダム
- $dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); ,$ fileinfo[1]-$wminfo[1]);
- }
- if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True) //画像ブレンドモードを設定します
- if (function_exists('ImageSaveAlpha') ) ImageSaveAlpha($temp_wm,True); //完全なアルファ チャネル情報を保存します
- //画像にウォーターマークを追加します
- if (function_exists('imageCopyMerge')) {
- ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y) ,0 ,0,$wminfo[0],$wminfo[1],$this->watermark_trans);
- } else {
- ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo) [0 ],$wminfo[1]);
- }
- //画像を保存
- switch ($fileinfo['mime']) {
- case 'image/jpeg' :
- @imageJPEG($temp,$file);
- ブレーク;
- ケース 'image/png' :
- @imagePNG($temp,$file);
- ブレーク;
- ケース 'image/gif' :
- @imageGIF($temp,$file);
- ブレーク;
- }
- //ゼロ時間画像を破棄します
- @imageDestroy($temp);
- @imageDestroy($temp_wm);
- }
- }
- }
- //ファイル拡張子を取得します
- function fileext($filename) {
- return strto lower(substr(strrchr) ($filename ,'.'),1,10));
- }
- }
- ?>
コードをコピー
使用例:
|