コードをコピー コードは次のとおりです:
/**
* ファイルアップロードクラス
*/
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 = '') {
$this->file_name = $file_name;//メソッドの名前変更時間に基づいた名前付けを表し、他のものは指定された名前
$this->save_path = (preg_match('//$/',$save_path)) ? を使用します。 this->allow_types = $allow_types == '' ? 'jpg|gif|png|zip|rar' : $allow_types>}
/**
* ファイルをアップロードします
* @access public
* @param $files アップロードを待機しているファイル (フォームからの $_FILES[])
* @return boolean ブール値を返します
*/
public function Upload_file( $files) {
$name = $files['name'];
$type = $files['type'];
$size = $files['size']; tmp_name = $files['tmp_name'];
$error = $files['error'];
case 0 : $this->errmsg = ''; 🎜>break;
ケース 1 : $this->errmsg = 'php.ini のファイル サイズを超えました';
break;
ケース 2 : $this->errmsg = 'MAX_FILE_SIZE を超えましたオプションで指定されたファイル サイズ';
break;
ケース 3 : $this->errmsg = 'ファイルの一部のみがアップロードされました';
break; >errmsg = 'ファイルはアップロードされませんでした';
break;
ケース 5 : $this->errmsg = 'アップロードされたファイルのサイズは 0';
break; ->errmsg = 'ファイルのアップロードに失敗しました! ';
break;
}
if($error == 0 && is_uploaded_file($tmp_name)) {
//ファイルの種類を検出
if($this->check_file_type($) name) == FALSE){
return FALSE;
}
//ファイルサイズを検出
if($size > $this->max_size){
$this-> errmsg = 'アップロードされたファイル '.$name.' サポートされる最大ファイルは '.ceil($this->max_size) です。 /1024).' kb ファイル';
return
}
$this->set_save_path();//ファイルの保存パスを設定します
$new_name this->file_name != 'date' ? $this->file_name.'.'.$this->ext : date('YmdHis').'.'.$this->ext;//Set新しいファイル名
$this->uploaded = $this->save_path.$new_name;//アップロードされたファイル名
//ファイルを移動
if(move_uploaded_file($tmp_name,$this-> ;uploaded)) {
$this->errmsg = 'ファイル'.$this->uploaded.'アップロードに成功しました。 ';
return TRUE;
}else{
$this->errmsg = 'ファイル'.$this->アップロードされました。'アップロードに失敗しました。';
return
}
}
}
/**
* アップロードされたファイルの種類を確認します
* @access public
* @param string $filename チェックを待っているファイル名
* @return チェックに合格した場合は TRUE、FALSE とエラー メッセージを返します。失敗した場合
*/
public function check_file_type($filename){
$ext = $this ->get_file_type($filename);
$this->ext = $ext;
$allow_types =explode('|',$this->allow_types);//アップロードを許可する 名前付き配列
//echo $ext;
//アップロードされたファイル拡張子がアップロードを許可されているファイル拡張子に含まれているかどうかを確認します
if(in_array($ext,$allow_types)){
return TRUE
}else{
$this->errmsg = 'ファイルのアップロード'.$filename.'タイプ エラー、アップロードのみサポート'.str_replace('|',',',$this->allow_types).'
return
}
}
/**
* ファイルタイプの取得
* @access public
* @param string $filename ファイルタイプを取得する対象のファイル名
* @return string file type
*/
public function get_file_type($filename){
$info = pathinfo($filename);
$ext = $info['extension']; 🎜> return $ext;
}
/**
* ファイルアップロード後の保存パスを設定
*/
public function set_save_path(){
$this->save_path = (preg_match('//$/', $this ->save_path)) $this->save_path : $this->save_path .
if(!is_dir($this->save_path)){
//Ifディレクトリが存在しない場合、ディレクトリを作成します
$this->set_dir()
}
}
/**
* ディレクトリを作成します
* @access public
* @param string $dir ディレクトリを作成するパス
* @return boolean エラー メッセージを返し、失敗した場合は FALSE を返します
*/
public function set_dir($dir = null){
//パスが存在するかどうかを確認します
if(!$dir){
$dir = $this->save_path;
if(is_dir($dir) ){
$ this->errmsg = '作成するフォルダーは既に存在します! ';
}
$dir =explode('/', $dir);
foreach($dir as $v){
if($v){
$d .= $v . '/';
if(!is_dir($d)){
$state = mkdir($d, 0777); ;errmsg = 'ディレクトリ の作成中にエラーが発生しました '!';
}
}
}
return true;
}
}
/*************************************************
* 画像処理クラス
*
* 画像に対してサムネイル、ウォーターマーク、その他の操作を生成できます
* このクラスのデフォルトのエンコードは UTF8 です。GBK で使用したい場合は、中国語の文字列を追加してください。 img_mark メソッドのウォーターマークを削除します。iconv アノテーションを削除します。
*
* UTF8 の中国語文字と英語文字のサイズ (ピクセル) は判断しにくいため、中国語と英語の文字が混在しすぎると、文字列が左に偏っている可能性があります
* または右に偏っている場合があります。プロジェクトに応じてください。 環境では、get_mark_xy メソッド
* で $strc_w = strlen($this->mark_str)*7 5 の GD ライブラリ サポートが必要です行調整
*。このクラスをより効果的に使用するには、GD ライブラリ 2.0
*
* @author Kickflip@php100 QQ263340607
********** を使用することをお勧めします。 ************************* *************/
class UploadImg extends UploadFile {
public $mark_str = 'kickflip@php100'; //ウォーターマーク文字列
public $str_r = 0; //文字列の色 R
public $str_g = 0; //文字列の色 G
public $str_b = 0; ; //文字列色 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) px)
* @param string $source_img ソース画像(パスファイル名)
*/
public function img_resize($w,$h, $source_img = NULL){
$source_img = $source_img == NULL ? $this->uploaded : $source_img;// ソース ファイルのアドレスを取得します。空の場合は、最後にアップロードされた画像がデフォルトになります。
if(! is_file($source_img)) { //ソース画像が存在するかどうかを確認します
$this->errmsg = 'File'.$source_img.'存在しません';
return
}
$this->source_img = $source_img;
$img_info = getimagesize($source_img);
$source = $this->img_create($source_img); //ソース画像を作成します
->resize_w = $w;
$this->resize_h = $h;
$thumb = imagecreatetruecolor($w,$h);
imagecopyresize($thumb,$source,0, 0) ,0,0,$w,$h,$img_info[0],$img_info[1]);//サムネイル画像を生成
$dst_path = $this->dst_path == '' $this -> ;save_path : $this->dst_path; // ターゲットフォルダーのパスを取得します
$dst_path = (preg_match('//$/',$dst_path)) ? //対象フォルダーの後に / を追加
if(!is_dir($dst_path)) $this->set_dir($dst_path) //対象フォルダーが存在しない場合は作成します
$dst_name = $this-> ;set_newname($source_img);
$this->img_output($thumb,$dst_name);// 出力画像
imagedestroy($thumb);
/**
*Watermark
*@access public
*@param string $source_img ソース画像パス ファイル名
*@param integer $mark_type ウォーターマークの種類 (1 は英語の文字列、2 は中国語の文字列、3 は画像のロゴ、デフォルトは英語の文字列です)
*@param integer $mark_postion ウォーターマークの位置 (1 は左下隅、2 は右下隅、3 は左上隅、4 は右上隅、デフォルトは右下隅です)
*@ウォーターマーク付き画像を返します
*/
public function img_mark($source_img = NULL,$mark_type = 1,$mark_postion = 2) {
$source_img = $source_img == NULL ? ;uploaded : $source_img;//ソース ファイルのアドレスを取得します。空の場合は、デフォルトで最後にアップロードされた画像になります
if(!is_file($source_img)) { //ソース画像が存在するかどうかを確認します
$this->errmsg = 'ファイル'.$source_img.' は存在しません';
return
}
$this->source_img = $source_img; = getimagesize ($source_img);
$source = $this->img_create($source_img); //ソース画像を作成します
$mark_xy = $this->get_mark_xy($mark_postion);//取得ウォーターマークの位置
$mark_color = imagecolorallocate($source,$this->str_r,$this->str_g,$this->str_b);
switch($mark_type) {
ケース 1 : //英語の文字列ウォーターマークを追加します
$str = $this->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color); 🎜>$ this->img_output($source,$source_img);
break;
ケース 2: //中国語の文字列ウォーターマークを追加します
if(!is_file($this->mark_ttf)) { // フォント ファイルが存在するかどうかを確認します
$this->errmsg = 'ウォーターマークの作成に失敗しました: フォント ファイル'.$this->mark_ttf.' が存在しません!'
return
}
$str = $this->mark_str;
//$str = iconv('gbk','utf-8',$str);//文字エンコーディングを変換する GBK エンコーディングを使用している場合は、削除してくださいこの行コメント
imagettftext($source,12,0,$mark_xy[2],$mark_xy[3],$mark_color,$this->mark_ttf,$str);
$this->img_output ($source,$ source_img);
break;
case 3: //画像のウォーターマークを追加します
if(is_file($this->mark_logo)){ //ウォーターマーク付きのロゴ画像がある場合、ロゴ画像の基本情報を取得、存在しない場合は終了
$logo_info = getimagesize($this->mark_logo)
}else{
$this->errmsg = '透かしの挿入に失敗しました: ロゴ ファイル '.$this->mark_logo.' が存在しません。 ';
return FALSE;
}
$logo_info = getimagesize($this->mark_logo)
if($logo_info[0]>$img_info[0] || $logo_info[ 1]>$img_info[1]) { //ソース画像がロゴのサイズより小さい場合、終了します
$this->errmsg = '透かしの挿入に失敗しました: ソース画像'.$this->source_img. 「.$this->mark_logo.」より「小さい!」';
return FALSE;
}
$logo = $this->img_create($this->mark_logo);
imagecopy ( $source, $logo, $mark_xy[4], $mark_xy[5], 0, 0, $logo_info[0], $logo_info[1]);
$this->img_output($source,$source_img);
default: //その他はテキスト画像です
$str = $this->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color); >$this->img_output($source,$source_img);
break;
}
imagedestroy($source);
/**
* ウォーターマークの位置を取得します
* @access private
* @param integer $mark_postion ウォーターマークの位置 (1 は左下隅、2 は右下隅、3 は左上隅) 、4 は右上隅、その他は右下隅です)
* @return array $mark_xy ウォーターマーク位置の座標 (インデックス 0 は英語の文字列のウォーターマーク座標 X、インデックス 1 は英語の文字列のウォーターマーク座標 Y、
* インデックス 2 は中国語の文字列透かし座標 X、インデックス 3 は中国語の文字列透かし座標 Y、インデックス 4 は透かし画像の座標 X、インデックス 5 は透かし画像の座標 Y)
*/
private function get_mark_xy($mark_postion){
$img_info = getimagesize($this->source_img);
$stre_w = strlen($this->mark_str)*9 5; //ウォーターマークの英字の長さ文字列 (px) のサイズ (サイズ 5 の英語の文字のサイズは約 9px、美しさのために 5px を加えます)
//(サイズ 12 の中国語のサイズは 12px、utf8 での中国語の文字の長さ)は 3 バイトです。1 バイトは 4px で、英語 1 文字の長さは約 9px です。
// 中国語と英語が混在している場合に完全に表示するには、その長さをバイト数 * 7px に設定します。
$strc_w = strlen( $this->mark_str)*7 5; //ウォーターマークの中国語文字列の長さ (px)
if(is_file($this->mark_logo)){ //ウォーターマークロゴの画像、ロゴ画像を取得 基本情報
$logo_info = getimagesize($this->mark_logo)
}
//imagestring関数では文字列の開始位置が異なるためimagettftext 関数、英語と中国語の文字列の Y 位置にも違いがあります
//imagettftext 関数はテキストの左上隅から参照されます。imagettftext 関数はテキストの左下隅から参照されます。
switch($mark_postion){
case 1: //左下隅の位置
$mark_xy[0] = 5; //透かしの英語文字列座標 X
$mark_xy[1] = $img_info [1]-20; //ウォーターマーク英語文字列座標 Y
$mark_xy[2] = 5; //ウォーターマーク中国語文字列座標 $mark_xy[0] = $img_info[0]-$stre_w;文字列座標 X
$mark_xy[1] = $img_info[1]-20; //透かし英語文字列座標 Y
$mark_xy[2] = $img_info[0]-$strc_w;座標 X
$mark_xy[3] = $img_info[1]-5; //透かし中国語文字列座標 Y
$mark_xy[4] = $img_info[0]-$logo_info[0]-5;/ /ウォーターマーク画像座標 X
$mark_xy[5] = $img_info[1]-$logo_info[1]-5 ;//ウォーターマーク画像座標 Y
break
case 3: //位置は左上コーナー
$mark_xy[0] = 5; //ウォーターマーク英語文字列座標 X
$mark_xy[1] = 5; //ウォーターマーク英語文字列座標 Y
$mark_xy[2] = 5;ウォーターマークの中国語文字列座標 X
$mark_xy[3] = 15; //ウォーターマークの中国語文字列座標 Y
$mark_xy[4] = 5; //ウォーターマーク画像の座標 🎜>$mark_xy[0] = $img_info[ 0]-$stre_w; //ウォーターマーク英語文字列座標 X
$mark_xy[1] = 5; //ウォーターマーク英語文字列座標 Y
$mark_xy[2] = $img_info[0]-$strc_w; /ウォーターマークの中国語文字列座標 X
$mark_xy[3] = 15; //ウォーターマークの中国語文字列座標 Y
$mark_xy[4] = $img_info [0]-$logo_info[0]-5;//ウォーターマーク画像座標 右下隅
$mark_xy[0] = $img_info[0]-$stre_w; //ウォーターマーク英語文字列座標 X
$mark_xy[1] = $img_info[1]-5;//ウォーターマーク英語文字列座標 Y
$mark_xy[2] = $img_info[0]-$strc_w; //ウォーターマーク中国語文字列座標 X
$mark_xy[3] = $img_info[1]-15;中国語の文字列座標 Y
$mark_xy[4] = $img_info[0]-$logo_info[0]-5;//透かし画像の座標 X
$mark_xy[5] = $img_info[1]-$logo_info [1]-5;//ウォーターマーク画像座標 Y
break;
}
return $mark_xy;
}
/**
* ソースイメージの作成
* @access private
* @param string $source_img ソースイメージ (パスファイル名)
* @return img ターゲットファイルからイメージを作成
*/
private function img_create( $source_img) {
$info = getimagesize($source_img);
switch ($info[2]){
ケース 1:
if(!function_exists('imagecreatefromgif')){
$source = @imagecreatefromjpeg($source_img);
}else{
$source = @imagecreatefromgif($source_img);
ケース 2:
$source = @imagecreatefromjpeg($source_img);
ケース 3:
$source = @imagecreatefrompng($source_img);
ケース 6:
$source = @ imagecreatefromwbmp($source_img);
break;
デフォルト:
break;
}
return $source;
/**
* 画像の名前を変更します
* @access private
* @param string $source_img ソース画像のパス ファイル名
* @return string $dst_name 名前を変更した画像名 (パス ファイル名)
*/
プライベート関数 set_newname($sourse_img) {
$info = pathinfo($sourse_img);
$new_name = $this->resize_w.'_' .$this->resize_h.'_'.$info['basename'];//ファイル名を次のように変更します: width_height_filename
if($this->dst_path == '') { //サムネイルの保存パスは空です。デフォルトはソース ファイルと同じフォルダーです。
$dst_name = str_replace($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]){
ケース 1:
if(!function_exists('imagegif')) {
imagejpeg($im,$dst_name);
}else{
imagegif($im, $dst_name);
ケース 2:
imagejpeg ($ im,$dst_name);
ケース 3:
imagepng($im,$dst_name);
ケース 6:
imagewbmp($im, $dst_name) );
break;
}
}
}
?>
php ファイルのアップロード クラスのソース コードのパッケージ化