オンラインの友人から提供されたファイルアップロードクラスのコードを以下に詳しく紹介します。必要に応じて参照してください。
オンラインの友人から実装されたファイルアップロードクラスのコードを以下に詳しく紹介します。必要に応じて参照してください。
/**
*ファイルアップロードクラス
*/
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)) $save_path : $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'];switch ($error) {
case 0 : $this->errmsg = '';
Break;
ケース 1 : $this->errmsg = 'php.ini のファイル サイズを超えました';
Break;
ケース 2 : $this->errmsg = 'MAX_FILE_SIZE オプションで指定されたファイル サイズを超えました';
Break;
ケース 3: $this->errmsg = 'ファイルの一部のみがアップロードされました';
Break;
ケース 4: $this->errmsg = 'アップロード ファイル サイズは 0';
Break;
デフォルト: $this->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.'< font> が大きすぎます。サポートされる最大値は '.ceil($this->max_size/1024).'kb file';
return FALSE;
}
$this - >set_save_path();// ファイルの保存パスを設定します
$new_name = $this->file_name != 'date' ? $this->file_name.'.'.$this->ext : date( 'YmdHis ').'.'.$this->ext;//新しいファイル名を設定します
$this->gt;uploaded = $this->save_path.$new_name;//アップロード後のファイル名
/ /ファイルを移動します
if(move_uploaded_file($tmp_name,$this->uploaded)){
$this->errmsg = 'File'.$this->uploaded.'フォント>アップロード成功! ';
return TRUE;
}else{
$this->errmsg = 'File'.$this->uploaded.'アップロードに失敗しました。 ';
return FALSE;/**
//ディレクトリが存在しない場合は、ディレクトリを作成します
* アップロードされたファイルの種類を確認します
* @access public
* @param string $filename チェックを待っているファイル名
* @return チェックが成功した場合は TRUE、失敗した場合は FALSE を返し、エラーメッセージを返します
*/
public function check_file_type($filename){
$ext = $this->gt;get_file_type($filename);
$this->gt;ext = $ext;
$allow_types =explode( '|',$this->allow_types);//アップロードが許可されているファイル拡張子を配列に分割します
//echo $ext;
//アップロードされたファイル拡張子が、保存されているファイル拡張子の中にあるかどうかを確認しますアップロードを許可します
if (in_array($ext,$allow_types)){
return TRUE;
}else{
$this->errmsg = 'ファイルのアップロード'.$filename.'< /font>タイプ エラー。'.str_replace('|',',',$this->allow_types) などのファイル タイプのアップロードのみをサポートします。'!';
false; function set_save_path(){
$this->save_path = (preg_match('//$/',$this->save_path)) $this->save_path : $this->save_path ;
if(!is_dir($this->save_path)){$this->set_dir();
public function set_dir($dir = null){
}
}
/**
* ファイルタイプを取得します
* @access public
* @param string $filename ファイルタイプを取得する対象のファイル名
* @return string ファイルタイプ
*///パスが存在するかどうかを確認します
$d .= $v . !is_dir($d)){
if(!$dir){
$dir = $this->save_path;
}
if(is_dir($dir) )){
$this->errmsg = '作成するフォルダーは既に存在します! ';
}
$dir =explode('/', $dir);
foreach($dir as $v){
if($v){$state = mkdir($d, 0777);
if(!$state)
$this->errmsg = '$d を作成しています' 。エラー! ';
}
}
}
return true;
}
}
/**
* ファイルをアップロードした後に保存パスを設定します
*/
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)
* @param string $source_img ソース画像(パス+ファイル名)
*/
public function img_resize($w,$h,$source_img = NULL){
$source_img = $source_img == NULL ? $this->uploaded : $source_img;// source ファイルのアドレス。空の場合、デフォルトで最後にアップロードされた画像になります
if(!is_file($source_img)) { //ソース画像が存在するかどうかを確認します
$this->errmsg = 'File'.$source_img .'存在しません';
return FALSE;
}
$this->source_img = $source_img;
$img_info = getimagesize($source_img);
$source = $this->img_create($source_img); //ソース画像を作成します
$this->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)) ? $dst_path : '/';// ターゲットフォルダーを追加します。 after Up/
if(!is_dir($dst_path)) $this->set_dir($dst_path); //対象フォルダーが存在しない場合は作成
$dst_name = $this->set_newname($source_img) ;
$ this->img_output($thumb,$dst_name);//出力画像
imagedestroy($source);
imagedestroy($thumb);
}/**
*Watermark
*@access public
*@param string $source_img ソース画像パス + ファイル名
*@param integer $mark_type ウォーターマークの種類 (1 は英語の文字列、2 は中国語の文字列、3 は画像のロゴ、デフォルトは英語) string)
*@param integer $mark_postion ウォーターマークの位置 (1 は左下隅、2 は右下隅、3 は左上隅、4 は右上隅、デフォルトは右下隅);
*@return 透かし入りの画像
*/
public function img_mark ($source_img = NULL,$mark_type = 1,$mark_postion = 2) {
$source_img = $source_img == NULL ? $this->uploaded : $source_img;// ソース ファイルのアドレスを取得します。空の場合、デフォルトは前回アップロードした画像です
if(!is_file($source_img)) { //ソース画像が存在するか確認します
$this->errmsg = 'File'.$source_img.'存在しません';
return FALSE;
}
$this ->source_img = $source_img;
$img_info = 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) {
case 1: //英語の文字列ウォーターマークを追加します
$str = $this->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$ str,$mark_color);
$this ->img_output($source,$source_img);
Break;case 2: //中国語文字列のウォーターマークを追加します
case 3: //画像の透かしを追加します
$this->errmsg = 'ウォーターマークの挿入に失敗しました: フォント ファイル' .$this->mark_ttf.' は存在しません!';
return FALSE;
}
$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;if(is_file ($this->mark_logo)) { //ウォーターマークロゴ画像があればロゴ画像の基本情報を取得、存在しない場合は終了
$logo_info = getimagesize($this->mark_logo);
}else{
$ this-> ;errmsg = '透かしの挿入に失敗しました: ロゴ ファイル '.$this->mark_logo.' が存在しません。 ';
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);
Break;デフォルト: //その他はテキスト画像です
$str = $ this ->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color);
$this->img_output($source,$source_img);
ブレーク ;
}
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)
*/
プライベート関数 get_mark_xy($mark_postion){
$img_info = getimagesize($this->source_img);$stre_w = strlen ($this->mark_str)*9+5; //ウォーターマークの英語文字列の長さ (px) (サイズ 5 の英語文字のサイズは約 9px、さらに美しさのために 5px です)
if(is_file) ($this->mark_logo)) { //ウォーターマークロゴ画像がある場合、ロゴ画像の基本情報を取得
//(サイズ 12 の場合) ) utf8 では、中国語の文字の長さは 3 バイト、英語の文字の長さは 1 バイトあたり約 9 ピクセルになります。 、長さはバイト数*7px)
$strc_w = strlen($this->mark_str)*7+5; //ウォーターマークの中国語文字列の長さ(px)$logo_info = getimagesize($this->mark_logo);
// imagestring関数とimagettftext関数では文字列の開始位置が異なるので、英語と中国語の文字列のY位置も異なります
}//imagestring関数はテキストの左上から参照されますimagettftext関数はから参照されます。テキストの左下隅。
case 1: //位置は左下隅です
switch($mark_postion){$mark_xy[0] = 5; //ウォーターマークの英語の文字列座標 /ウォーターマークの中国語の文字列座標。 ] = $img_info[1]-$logo_info[1]-5;//透かし画像の座標 Y
休憩;
Break;
case 2: //右下隅の位置
$mark_xy[0] = $img_info[0]-$ stre_w ; //ウォーターマーク英語文字列座標 //ウォーターマーク画像座標 0] = 5 // ウォーターマーク英語文字列座標 X
$mark_xy[2; ] = 5; // ウォーターマークの中国語文字列座標 [3] = 15;// ウォーターマークの中国語文字列座標 Y
$mark_xy[4] = 5;// ウォーターマーク画像の座標 X
$mark_xy[5] = 5;//ウォーターマーク写真の座標 Ycase 4: //右上隅の位置
$mark_xy[3] = $img_info[1]-15;//ウォーターマークの中国語文字列座標 Y
$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; //ウォーターマーク画像の座標 [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[4] = $img_info [0]-$logo_info[0]-5;//透かし画像の座標
$info = getimagesize($source_img);
return $mark_xy;
}
/**
* ソース画像を作成
* @access private
* @param string $source_img ソース画像 (パス + ファイル名)
* @return img ターゲットファイルから画像を作成
*/
private function img_create( $source_img) {switch ($info[2]){
case 1: N if (! Function_exists ('ImageCreateFromgif')) {
$ Source = @imageCreateFromjpeg ($ Source_img) ; OMGIF ($ Source_img);
ケース 2:
$ Source = @ImageCreateFromjpeg ($ Source_img);
ケース 6:
$ Source = @imageCreateFromwbmp ($ Source_img);
デフォルト: C $ Source = False;
Return $ Source
}
/**
* 画像の名前を変更します
* @access private
* @param string $source_img ソース画像のパス + ファイル名
* @return string $dst_name 名前を変更した画像名 (パス + ファイル名)
*/
fo ($ 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]){
case 1:
if(!function_exists( 'imagegif')){
$ dst_name);上記のコードをファイルに保存すると、パブリックに呼び出し、変更、削除することができます。
http://www.bkjia.com/PHPjc/444758.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/444758.html
技術記事