/** *ファイルアップロードクラス */ class UploadFile {
public $max_size = '1000000';//アップロードを設定しますファイル サイズ public $ file_name = 'date';//名前変更方法は時間に基づいて名前を付けることを意味し、他の人は指定された名前を使用します public $allow_types;//アップロードできるファイル拡張子、異なるファイル タイプは " で区切られます。 |" public $errmsg = '';//エラーメッセージ public $uploaded = '';//アップロードされたファイル名(ファイルパスを含む) public $save_path;//アップロードされたファイルの保存パス private $files;//アップロードを待機している送信済みファイル private $file_type = array();//ファイル タイプ private $ext = '';//アップロード ファイル拡張子 /** * コンストラクター、初期化クラス * @access public * @param string $file_name アップロード後のファイル名 * @param string $save_path アップロードされた対象フォルダー */ public function __construct($save_path = './upload/ ',$file_name = 'date',$allow_types = '') { = (preg_match('// $/',$save_path)) $save_path : '/'; $allow_types rar' : $allow_types; }
/** * files * @Accesspublic * @param $ファイルアップロードを待っているファイル(フォームから$ _files []) */ public function Upload_file($files) { $name = $files['name']; $type = $files['type ']; $ size = $ files [' size ']; '; 休憩; ; ファイルサイズを検出します if($size > $this->max_size){ ‐ ‐ ファイル サイズの確認、サポートされる最大ファイル数 .ceil($this- >max_size/1024).'kb ; //ファイルの保存パスを設定します $new_name = $this->file_name != 'date' ? this->ext:date('YmdHis').' .' $ This-& gt; $ this-& gt; を設定します。 new_name; iLe ($ tmp_name,$this->uploaded)){ $this->errmsg = 'ファイルuploaded.'正常にアップロードされました。 '; 。 '; $this->get_file_type($filename); $this ->ext = $ext; = explode('|',$this->allow_types);//ファイル拡張子を分割する配列へのアップロードが許可されています この拡張子は、アップロードが許可されているファイル拡張子の中にありますか?使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用する ‐ ‐ 使用する 使用する 全体的に使用する オフ ‐ オフ オフ ‐ ‐‐‐‐ オフバックの許可するには、 ;'.$filename.'タイプ エラー。'.str_replace('|',',',$this->allow_types) のアップロードのみをサポートします。'< ;/font> ;ファイル タイプを待っています!'; ,, , ,$info = pathinfo($filename); $ext = $info['extension']; $ex t; ;save_path = (preg_match('//$/',$this->save_path)) ? ->save_path : $this->save_path . '/'; if(!is_dir($this-> ;save_path)){ = null) { gt;errmsg = '作成する必要があります フォルダはすでに存在します。 '; } $ $ DIR = Explode ('/', $ DIR); Foreach ($ DIR AS $ v) { $ d.'/'; $ d){$ state&lt; font&gt; ' } public $mark_str = 'kickflip@php100'; //ウォーターマーク文字列 public $str_r = 0; //文字列の色 R public $str_b = 0; color B public $mark_ttf = './upload/SIMSUN .TTC'; //透かしテキストフォントファイル(パスを含む) public $mark_logo = './upload/logo.png' //透かし画像 public $resize_h; ;//サムネイルの高さを生成 public $resize_w;/ /サムネイルの幅を生成 public $source_img;//ソース画像ファイル public $dst_path = './upload/';//サムネイルファイルの保存ディレクトリ、空白の場合はがソース画像保存ディレクトリになります /** * 生成後にサムネイル画像を生成します * @access public * @param integer $w 縮小画像の幅(px) * @param integer $h 縮小画像の高さ(px) * @param string $source_img 元画像(パス+ファイル名) ) */U Public Function Img_resize e_img; // ソース ファイルが空の場合はアドレスを取得します デフォルトは最後にアップロードされた画像です そうそうそうそうそうそうはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはい $this->source_img = $source_img? ; >resize_w = $w; $this->resize_hを使用して、 / / ターゲット フォルダーのパスを取得します $ dst_path = (preg_match ('// $/', $ dst_path)? ($dst_path)) $this->set_dir($dst_path); // 対象のフォルダーが存在しない場合は作成します $dst_name = $this->set_newname($source_img);親指,$dst_name); //出力画像 imagedestroy($); ,$mark_postion = 2) { $source_img = $source_img == NULL ? $this->uploaded: $source_img;// ソース ファイルのアドレスを取得します。空、それは最終的なアップロードされた画像 is_file($ source_img)){// Source Imageが存在するかどうかを確認しますSource_img); et_mark_xy ($ Mark_postion); // ウォーターマークの位置を取得します $mark_color = imagecolorallocate($source,$this->str_r,$this->str_g,$this->str_b);を使用use using use - using using using through out out out out out out out out through outole outce Through out let out off off off's ' through ,$source_img); Break; case 2: //中国語の文字列透かしを追加します 使用する 使用する 使用する 使用するthis->mark_ttf.'存在しません!' ;//文字エンコーディングを変換する GBKエンコーディングを使用している場合は、 のコメントを削除してください。この行 imagettftext($source,12,0,$mark_xy[2],$mark_xy[3],$mark_color,$this->mark_ttf,$str) ; $this-> 透かしロゴがありますロゴ画像の基本情報を取得します $logo_info = getimagesize($this->mark_logo);使用する 使用する 使用する 使用する ' を使用する ' を使用する ' を使用する - を使用する‐ ‐ ‐‐ 取得するビット画像。 ->mark_logo.' ' ; || $logo_info[1]>$img_info[1]) { //ソース画像がロゴのサイズより小さい場合は終了 $this->errmsg = '透かしの挿入に失敗しました: ソース画像'.$this ->source_img.' は '.$this->mark_logo.' よりも優れています。 '; false y [4]、$ mark_xy [0、0、$ logo_info [1])$stre_w = strlen($this->mark_str)*9+5; //ウォーターマークの英語文字列の長さ (px) (サイズ 5 の英語の文字サイズは、美しさを考慮して約 9px プラス 5px) 数字の漢字のサイズは 12px で、UTF8 での漢字の長さは 3 バイト、バイト数は 4px、英語の文字長はバイト数 * 7px) です。 ‐ - - - - - - −-- - - - −-- - - −-- −-- −-- −-- −-- - ‐--- ‐-- ‐ ‐ ‐ − −°− −±き){mark_logo){{ //透かしのロゴ画像がある場合は、ロゴ画像の基本情報を取得します。そのため、ポジションは異なります。 s ' through out's through out using ' through through through ' s ' through ' s ‐ ‐ ‐ ‐‐‐ case 1: // 左下隅に配置します 5; // ウォーターマークの中国語文字列座標 mark_xy[5] = $img_info[1] ]-$logo_info[1]-5;//透かし画像座標 Y Break; //透かし中国語文字列座標 ; //透かし画像座標 $mark_xy[0] = 5; // 透かし英語文字列座標 X $ mark_xy [3] = 15; // 透かし中国語文字列座標 y $ MARK_XY [4] = 5 // 透かし画像座標 x $ MARK_XY [5] = 5;透かし画像の座標 y bream; 4 ケース 4: // 右上隅の位置 $ Mark_xy [0] = $ img_info [0]-$ stre_w; // 透かしの英語文字列座標 x $ Mark_xy [1] = 5 ; // ウォーターマークの英語の文字列座標 Y $mark_xy[2] = $img_info[0]-$strc_w;$mark_xy[4] = $img_info[0]-$logo_info[0]-5;//透かし画像の座標 その他はデフォルトで右下隅に配置されます $mark_xy[0] = $img_info[0]-$stre_w;ウォーターマークの英語の文字列座標 座標 Y $mark_xy[2] = $img_info[0]-$strc_w; // ウォーターマークの中国語の文字列座標 $mark_xy[4] = $img_info[0]-$logo_info[0]-5;//ウォーターマークの座標Y ); * ソース画像の作成 * @access private * @param string $source_img ソース画像 (パス + ファイル名) * @return img ターゲットファイルから画像を作成 */ プライベート関数 set_newname($sourse_img) { $info = pathinfo ($sourse_img); $new_name = $this->resize_w.'_'.$this->resize_h.'_'. $info['basename'];// ファイル名を次のように変更します: width_height _ ファイル名 if ($ this- & gt; dst_path == '') {// サムネイルのパスが空として保存されている場合、デフォルトは次のようになります。ソースファイルと同じファイル $ dst_name = strplace ($ info ['basename'], $ new_name,$sourse_img); }else{ } $dst_name = $this->dst_path.$new_name; } return $dst_name; } /** * 出力画像 * @access private * @param $im 処理画像 * @param $dst_name 出力画像名(パス+ファイル名) * @return 出力画像 */ public function img_output($im,$dst_name) { $ info = getimagesize($ this->source_img); switch ($info[2]){ case 1: if(!function_exists('imagegif')){ imagejpeg($im,$dst_name); } else{ 休憩。 :
使い方
コードは以下の通りです コードをコピー < meta http-equiv="Content-Type" content="text/html; charset=gb2312" />< ;title>ファイルをアップロード
|
phpがファイルを処理します
上記のクラスファイルを呼び出し、以下のように動作します
コードは以下の通りです | コードをコピー |
$action =addslashes($_GET['action']) ; if( $action ==="udd") { $state=uploadfile('uploadfile'); //echo $state['err'];exit; if($state['err'] ){ die('< ;script>alert("アップロード エラー: '.$state['err'].'");history.go(-1);'); } else { echo 'ファイルはアップロードされました!削除して再アップロード'; }
} else{ echo ''; echo ' '; echo ' '; echo 'ファイルをアップロード'; //echo ""; echo '
'; echo ""; echo "echo ""; echo ''; } |