非常に完全な機能を備えたクラシックで使いやすい PHP ファイル アップロード クラスを収集し、開発中のバックアップとして保存します。
良いものはみんなが気に入れば本当に良いものです(笑)! ! !
/**
*ファイルアップロードクラス
*/
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 = ''; //ファイル拡張子をアップロードします
/**
*コンストラクター、初期化クラス
* @accesspublic
*/
public function __construct($save_path = './upload/',$file_name = 'date',$allow_types = '') {
$this-> $save_path : '/';
*
*ファイルのアップロード
* @accesspublic
* @param $ファイルアップロードするのが待機している(フォームから$ _files [])
*/
パブリック関数 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 = '';
case 1 case 1ファイルサイズ;
ケース 3: $this->errmsg = 'ファイルの一部だけがアップロード済み';
休憩。
'; if($ this> check_file_type($ name)==; color=red>'.ceil($this->max_size/1024).'kb $this- & gt; // ファイルの保存パスを設定します
$ new_name = $this- & gt; move_uploaded_file ($tmp_name,$this->uploaded)){ 成功! ';
True を返します
{
$ This-& GT; ファイル & lt;/font & gt;上 失敗! '; {
$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; .str_replace('|',',',$this->allow_types).'アウトアウトout out using using using パブリック関数get_file_type ($ filename) {
$ info = PATHINFO ($ FILENAME);
$ EXT = $ Info ['拡張子']
*ファイルタイプを取得します*/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)){
/**
* ファイルアップロード後に保存パスを設定します
*/
public function set_dir($dir = null){
is_dir($dir)){
this->errmsg = '作成するフォルダーは既に存在します。 ';
} $ $ DIR = Explode ('/', $ DIR);
Foreach ($ DIR AS $ v) {
$ d.'/'; $d)){
;errmsg = 'ディレクトリを作成しています' エラー! ';
trueを返します。 ******************
* 画像処理クラス
*
* 写真に対してサムネイル、ウォーターマーク、その他の操作を生成できます
* このクラスのデフォルトのエンコーディングは UTF8 です。 GBK で使用したい場合は、img_mark 内の中国語の文字列ウォーターマーク iconv コメントを削除してください。メソッド
*
* UTF8 の中国語文字と英語文字はサイズ (ピクセル) を決定することが難しいため、中国語と英語の文字が混在しすぎると、文字列が左に歪んで見えることがあります
*プロジェクト環境に応じて $strc_w = strlen($ in the get_mark_xy メソッド this->mark_str)*7+5 enter
* 行調整
* GD ライブラリのサポートが必要です。このクラスをより効果的に使用するには、GD ライブラリのサポートが推奨されますGD ライブラリ 2.0+ を使用するには
*
* @authorkickflip@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
= './upload/SIMSUN.TTC';ファイル (パスを含む)
public $mark_logo = './upload/logo.png'; // ウォーターマーク画像
public $resize_h;// サムネイルの高さを生成
public $resize_w;// サムネイルの幅を生成
public $source_img;/ /ソース画像ファイル
public $dst_path = './upload/';//サムネイルファイルの保存ディレクトリ、空白の場合はソース画像保存ディレクトリになります
/**
*。ソースイメージ(パス +ファイル名)*/
public function img_resize( $w,$h,$source_img = NULL){
$source_img = $source_img == NULL ? $this->uploaded : $source_img;// ソース ファイルのアドレスを取得します。空の場合はデフォルトになります。最後にアップロードした画像に追加します
>errmsg = 'File'.$source_img.'source_img);
$source = $this- >img_create($source_img); // ソース画像を作成しますを使用using imagecopyresize ($thumb,$source,0,0,0,0,$w,$h,$img_info[0],$img_info[1]);//サムネイル画像を生成します
== '' ? >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);
$これ-
/**
*ウォーターマークは英語の文字列)
*@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 ? // ソース ファイルのアドレスを取得します。
Source_img を返します。
} $ this- & gt; img_info = Getimagesize $ Source = $ this- & gt; img_create ($ source_img);/ / ソース画像を作成 $ Mark_xy = $ this- & gt; // ウォーターマークの位置を取得
$ Mark_color = ImageColoraALALALATE ($ Source, $ this-& gt; str_r, $ T His-& gt; 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) ; if(!is_file($ this-> mark_ttf)){// fontファイルが存在するかどうかを確認します。 $mark_color,$this->mark_ttf,$str);
休憩;
case 3: //画像のウォーターマークを追加します
if(is_file($this->mark_logo)){ //ウォーターマークのロゴ画像が存在する場合、ロゴ画像の基本情報を取得します。存在しない場合は終了します
$logo _info = getimagesize($this->mark_logo);
}else{
$this->errmsg = '透かしの挿入に失敗しました: ロゴ ファイル'.$this->mark_logo.' が存在しません。 '; >$img_info[0] || $logo_info[1]>$img_info[1]) {// ソース画像がロゴのサイズより小さい場合は終了します
$ this-& gt;失敗: ソース画像'。$ This-> ';
」 ( $source, $logo, $mark_xy[4], $mark_xy[5], 0 , 0, $logo_info[0], $logo_info[1])
$str = $ this-> mark_str;
Imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color);
$this->img_output($source,$source_img);
ブレーク ;
imagedestroy( $source); this->source_img);
$stre_w = strlen($this->mark_str)*9+5; //ウォーターマークの英語文字列の長さ (px) (サイズ 5 の英語の文字サイズ)約 9px、さらに美しさのために 5px)
utf8 では、漢字の長さは 12px です。バイトあたり 4 ピクセル、英語の文字の長さは 1 バイトあたり約 9 ピクセルです。 / 中国語と英語が混在している場合に完全に表示するために、その長さをバイト数*7px) に設定します
$strc_w = strlen($this->mark_str)*7+5;中国語の文字列 (px)
{// 透かしロゴの画像があれば、ロゴ画像の基本情報が取得されます。なぜ英語と中国語の文字列の Y 位置も異なります
。//imagestring 関数はテキストの左上隅に基づいています。imagettftext 関数はテキストの左下隅に基づいています。Switch($mark_postion){
ケース 1: //左下隅の位置
英語の文字列。座標 ] = $ 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; //透かしの英語文字列座標 X
$mark_xy; [1] = $img_info[1]-20;//ウォーターマーク英語文字列座標 Y
= $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
X
$mark_xy[1] = 5 ;//ウォーターマークの英語文字列座標 Y
$mark_xy[2] = 5; //ウォーターマークの中国語文字列座標 X
$mark_xy[3] = 15;//ウォーターマークの中国語文字列座標 Y
$mark_xy[4] = // 位置右上隅
] = $img_info[0]-$stre_w; //ウォーターマークの中国語の文字列座標 = $img_info[0]-$stre_w;$mark_xy[2] = $img_info[0]-$strc_w; //透かし中国語文字列座標 4] = $img_info[0]-$logo_info[0]-5;//透かし画像座標
Break;
}
return $mark_xy;
}
/**
*ソースイメージを作成します*/
プライベート関数 img_create($source_img) {
$info = getimagesize($source_img);
switch ($info[2]) {E ケース 1:
if (! Function_exists ('ImageCreateFromgif')) {
$ Source = @imageCreateFromjpeg ($ Source_img) ($ Source_img)
ケース 2:
ブレークの使用;
ケース 6:
$source = @imagecreatefromwbmp ($source_img);
ブレーク;
**
* 画像の名前を変更します
* @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,$source_img);
}else{
$dst_name = $this->dst_path. $new_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{
使用する 使用する スルー 使用する スルー スルー スルー アウト アウト アウト アウト アウト アウト スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルー スルースルー
ケース 3:
imagepng($im,$dst_name);
ブレーク