ホームページ >バックエンド開発 >PHPチュートリアル >PHP ファイルのアップロード クラス コード_PHP チュートリアル

PHP ファイルのアップロード クラス コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:25:55792ブラウズ

コードをコピーします コードは次のとおりです:

/**
* ファイルアップロードクラス
*/
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; /
パブリック関数upload_file($files) {
$name = $files['name'];
$size = $files['size']; $files['tmp_name'];
$error = $files['error'];
case 0 : $this->errmsg = ''; ->errmsg = 'php.ini のファイル サイズを超えました';
case 2 : $this->errmsg = 'MAX_FILE_SIZE オプションで指定されたファイル サイズを超えました'; this->errmsg = 'ファイルの一部のみがアップロードされました';
case 4 : $this->errmsg = 'ファイルはアップロードされませんでした'
break; = 'アップロード ファイル サイズは 0';
break;
default : $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 ファイル';
FALSE を返します
} - >set_save_path();// ファイルの保存パスを設定します
$new_name = $this->file_name != 'date' ? $this->file_name.'.'.$this->ext : date( 'YmdHis ').'.'.$this->ext;//新しいファイル名を設定します
$this->uploaded = $this->save_path.$new_name;//アップロード後のファイル名
/ /ファイルを移動
if(move_uploaded_file($tmp_name,$this->uploaded)){
$this->errmsg = 'File'.$this->uploaded.'アップロード成功! ';
return TRUE;
}else{
$this->errmsg = 'ファイル'.$this->アップロードされました。'アップロードに失敗しました。';
return FALSE;
}
}
}
/**
* アップロードされたファイルの種類を確認します
* @access public
* @param string $filename チェックを待機しているファイル名
* @return チェックが成功した場合は TRUE を返し、失敗した場合は FALSE を返し、エラーメッセージを返します
*/
$ext = $this->get_file_type($filename); ;ext = $ext;
$allow_types =explode('|',$this->allow_types);//アップロード可能なファイル拡張子を配列に分割します
//echo $ext;//アップロードされたファイルを確認しますファイル拡張子 アップロードが許可されているファイル拡張子ですか?
if(in_array($ext,$allow_types)){
}else{
$this->errmsg = 'ファイルをアップロードタイプ エラー。'.str_replace('|',',',$this->allow_types).' 、など ファイルの種類!';
return FALSE;
}
}
/**
* ファイルタイプを取得します
* @access public
* @param string $filename ファイルタイプを取得する対象のファイル名
* @return string ファイルタイプ
*/
$info = pathinfo($filename); ['拡張子 '];
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)){
// ディレクトリが存在しない場合は、ディレクトリ
$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($v){
$d .= $v . !is_dir($d)){
$state = mkdir($d, 0777);
if(!$state)
$this->errmsg = '$d を作成しています。'エラー!';
}
}
}
return true;
}
}
/*************************************************
* 写真処理クラス
*
* 画像に対するサムネイル、ウォーターマーク、その他の操作を生成できます
* このクラスのデフォルトのエンコーディングは UTF8 です。GBK で使用したい場合は、img_mark メソッド内の中国語文字列ウォーターマークの iconv コメントを削除してください。
*
* UTF8の漢字と英語の文字の大きさ(ピクセル)を決めるのが難しいため、中国語と英語の文字が混在しすぎると文字列が左
*または右に偏ってしまう可能性があります。 Adjust $strc_w = strlen($this- プロジェクト環境に応じて get_mark_xy メソッド内 >mark_str)*7+5 Enter
* ライン調整
* このクラスをより良く使用するには、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
$mark_ttf = './upload/SIMSUN.TTC' ;テキストフォントファイル (パスを含む)
public $mark_logo = './upload/logo.png'; //透かし画像
public $resize_h;//サムネイルの高さを生成
public $resize_w;//サムネイルを生成 サムネイルの幅
$ 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;// ソース ファイルのアドレスを取得します (空の場合)。デフォルトは最後にアップロードされた画像です
if(!is_file($source_img)) { //ソース画像が存在するかどうかを確認します
$this->errmsg = 'File'.$source_img.'存在しません';
return FALSE;
}
$this->source_img = $source_img;
$img_info = getimagesize($source_img); // ソース画像を作成
$this->resize_w = $w ;
$this->resize_h = $h;
$thumb = imagecreatetruecolor($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 : $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($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); source,$source_img);
break;
case 2: //中国語の文字列ウォーターマークを追加します
if(!is_file($this->mark_ttf)) { //フォントファイルが存在するかどうかを確認します
$this->errmsg = 'ウォーターマークに失敗しました: フォント ファイル '.$this->mark_ttf.' が存在しません!'
$this->mark_str; ,'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);
case 3: //画像のウォーターマークを追加します
if($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-> より小さいです;マークロゴ。';
FALSE を返す
}
$logo = $this->img_create($this->mark_logo);
imagecopy ( $source, $logo, $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],$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)
//(サイズの中国語文字のサイズ12 は 12px、utf8 では、中国語の文字の長さは 3 バイトで 1 バイトあたり 4 ピクセルですが、英語の文字の長さは 1 バイトあたり約 9 ピクセルです
// 中国語と英語が混在している場合に完全に表示するには、その値を設定します長さをバイト数にします *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 関数はテキストの左上隅に基づいています
switch($mark_postion){
case 1: //位置の左下隅
$mark_xy[0] = 5; //透かしの英語文字列座標
$mark_xy[3] = $img_info[1]-5;/ /ウォーターマークの中国語文字列座標 Y
$mark_xy[4] = 5;//ウォーターマーク画像の座標 X
$mark_xy[5] = $img_info[1] -$logo_info[1]-5; //ウォーターマーク画像の座標 Y
break ;
case 2: //右下隅の位置
$mark_xy[0] = $img_info[0]-$stre_w; //透かしの英語文字列座標
$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 //英語の文字列座標 Y
$mark_xy[4] = 5;画像座標 [0] = $img_info[0]-$stre_w; // ウォーターマーク英語文字列座標 X
$mark_xy[1] = 5 // ウォーターマーク英語文字列座標 Y
$mark_xy[2] = $img_info[0] -$strc_w; //ウォーターマーク中国語文字列座標 //ウォーターマーク画像座標 //ウォーターマーク英語文字列座標 中国語文字列座標 /ウォーターマーク画像座標 &*/
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); );
ブレイク;
$source = @imagecreatefromjpeg($source_img);
$source = @imagecreatefrompng($source_img); = @imagecreatefromwbmp($source_img);
デフォルト:
$source = FALSE;
$ ソースを返します。
/**
* 画像の名前を変更します
* @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);
imagewbmp($im,$dst_name);
}
?>


php ファイルのアップロード クラスのソース コードのパッケージ化



http://www.bkjia.com/PHPjc/324046.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/324046.html

次のようにコードをコピーします: ?php /*** ファイルアップロードクラス*/ class UploadFile { public $max_size = '1000000';//アップロード ファイル サイズを設定します public $file_name = 'date';//名前変更メソッドは次のようになります。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。