ホームページ > php教程 > php手册 > ファイルアップロードターミネータI

ファイルアップロードターミネータI

WBOY
リリース: 2016-06-21 09:14:13
オリジナル
1077 人が閲覧しました

アップロード|ターミネーター

PHP コード:---------------------------------------------- -- ----------------------------------

/*
----- --- --------------------------------------------------- --- ------------------------
クラス名: Lwguploadandquery
説明: SQL ステートメントの実行とファイルのアップロードのクラス。 Lwgupload クラス
作成者 :Long Weiguo
ネットワーク ユーザー:lwg888
電子メール:lwg888@163.com
使用、変更、配布のために作成者情報を保持してください
--------------- ---------- -------------------------------------- ------- ------------
*/

require_once(dirname(__FILE__)."/Lwgdb.inc.php");//データベース接続とクエリクラス
require_once (dirname(__FILE__)." /Lwgupload.inc.php");//親クラス
class Lwguploadandquery extends Lwgupload{
var $sql;//SQL ステートメント
var $url;// ファイルのアップロード後にリダイレクトされた URL成功しました

//重要なヒント: SQL ステートメントの記述:
//$sql=sprintf("update test1 set name='%s', image1='%s', image2='%s' where id='%d '",$_POST['name' ],"image1_name","image2_name",$_POST['id']);
//「image1_name」、「image2_name」では、image1 と image2 は、ファイルドメインの後に「_name」サフィックスが続きます。以下で見つけて変更すると便利です
function Lwguploadandquery($sql="",$uploadfield="",$url="",$uploadpath="",$ maxsize="",$ftype="all"){
$this->sql=$sql;
$this->url=$url;
$this->Lwgupload($uploadfield,$uploadpath,$ maxsize,$ftype);
}

function run() {
if (empty($this->sql))return $this->output("実行可能な SQL ステートメントがありません。 ");

if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);// 配列でない場合は、配列に変更します。これにより、後続のコードが簡略化されます
if (!is_array($this->maxsize))$this->maxsize=array($this->maxsize);//上記と同じです
if (!is_array ($this->ftype))$this ->ftype=array($this->ftype);//上と同じ

$totaluploadfield=count($this->uploadfield);
for ($ i=0;$i<$totaluploadfield;$i++) {
$uploadfile=$_FILES[$this->uploadfield[$i]]['tmp_name'];
$file_name=$_FILES[$this-> Uploadfield[$i]]['name'];
$file_old=$_POST[$this->uploadfield[$i].'_old'];//更新で使用され、アップロードされたファイルに対応する元のファイルを表しますfile
$file_del=$_POST[$this->uploadfield[$i].'_del'];//元のファイルが削除対象としてマークされているかどうか

if ($uploadfile!=""&&$file_name!=" "){
//アップロードする必要があることを示します、つまりファイルフィールドに任意の文字が入力されます
$uploadfield[]=$this->uploadfield[$i];
//新しいアップロードを取得しますファイルフィールドに文字がなければアップロードする必要がないため
$maxsize[]=( !empty($this->maxsize[$i]))?$this->maxsize[$i] ]:$this->maxsize[0];
//対応するサイズ制限値を取得します
$ftype []=(!empty($this->ftype[$i]))?$this->ftype [$i]:$this->ftype[0];
//対応する型制限を取得します Value
$newfile=$this->uploadpath."/".$file_name;
//アップロードされたファイルのアドレス
$ insertname=$file_name;
//mysql テーブルに対応する、SQL 言語を変更するときに使用する必要があります。フィールドの値は、現在アップロードされているファイルの名前に変更されます
if ($file_old!="")$oldfile []=$this->uploadpath."/".sprintf('%s',$file_old);
//更新中に元のファイルのアドレスを取得し、新しいファイルがアップロードされた後に古いファイルを削除します
}
else if ($file_old!=""){
//アップロードする必要がないことを示します。つまり、ファイルフィールドに文字が入力されていませんが、古いファイルがあります
if ($file_del=="true") {
//古いファイルが削除対象としてマークされている場合
$insertname="";
//SQL 言語を変更するときに使用する必要があり、mysql テーブル内の対応するフィールドを変更します。値は空に変更されます
$oldfile []=$this->uploadpath."/".sprintf('%s',$file_old);
}
else $insertname=sprintf('%s',$file_old)
//アップロードも削除も行いませんこれは SQL 言語を変更するときに使用されます。mysql テーブルの対応するフィールドの値を元のファイル名に変更します
}
else $insertname="";
// アップロードにも元のファイルにも使用されません。 SQL 言語の場合、mysql テーブルの対応するフィールドの値を空に変更します
$this->sql=str_replace($this->uploadfield[$i]."_name", $insertname, $this -> sql);
// SQL ステートメントを変更します
}

$this->uploadfield=$uploadfield;
$this->gt;maxsize=$maxsize;
$this->ftype=$ftype;

if (count ($uploadfield)>0){
if (!$this->test($oldfile))return false;
}
//すべてアップロードできるかテスト

if (count($oldfile)>0)$this->err_del((count) ( $oldfile)-1),$oldfile);
// テストに合格したら、削除対象としてマークされた元のファイルを削除します

$db=new Lwgdb();// データベース接続とクエリ クラス
if (count($uploadfield )= =0){
if(!$db->query($this->sql)){
return $this->output("エラー: NO1、送信に失敗しました。もう一度お試しください。");
/ /NO1 は、ファイルがアップロードされず、SQL ステートメントの実行が失敗したことを意味します
}
else $this->debugstr.="sql ステートメント:'".$this->sql."'実行は成功しました }
else {
if ($this->upload()){
if(!$db->query($this->sql)){
$this->err_del(count) ($uploadfield)- 1,$this->newfile);
//アップロードされたファイルを削除します
return $this->output("エラー: NO2、送信に失敗しました。もう一度お試しください。");
//NO1ファイルのアップロード後に SQL ステートメントの実行に失敗したことを意味します
}
else $this->debugstr.="sql ステートメント:'".$this->sql."' 正常に実行されました
";
}
}
if (!empty ($this->url))header("location:".$this->url);
}
}

/*
--------使い方---------- --------------------------------------
$uploadname =array("image1" ,"image2");
$sql=sprintf("update test1 set name='%s', image1='%s', image2='%s' where id='%d'" ,$_POST['name '],$uploadname[0].'_name',$uploadname[1].'_name',$id);
$obj=new Lwguploadandquery($sql,$uploadname,'','アップロード',array(40960 ,2048),array('jpg,gif','all'));
$obj->run();
または:
$obj=new Lwguploadandquery($sql,$uploadname, '','アップロード' ,array(40960,2048),array('jpg,gif','all'));
$obj->uploadname=array("image1","image2");
$obj ->sql=sprintf ("update test1 set name='%s', image1='%s', image2='%s' where id='%d'",$_POST['name'],$uploadname [0].'_name ',$uploadname[1].'_name',$id);
$obj->url="http://xxxxxx.com";
$obj->uploadpath="アップロード/image";
$ obj->maxsize=1024*5;
$obj->ftype='swf';
$obj->run();
---------- ------ -------------------------------------------- ----------
*/
?>

-------------------------------------- ---------------------------------------------------- -


/*
----- ----------------------------------- --------------- ----------------------------
クラス名: Lwgupload
説明: 複数ファイルアップロードクラス
作者: Long Weiguo
ネットワークユーザー:lwg888
電子メール: lwg888@163.com
使用、改変、配布する際には作者情報を保管してください
-------- ------------------------ ------------------------ ------------------------ -----
*/

class Lwgupload{
//---------- ---値を設定できる変数----- --------
var $uploadfield;//アップロードされたファイルのフィールド名
var $maxsize; //アップロードするファイルのサイズを制限します
var $file_old;//削除する必要がある古いファイル
var $uploadpath;/ /ファイルのアップロードパス
var $ftype;//アップロードするファイルの種類を制限します
var $ debug=true;//デバッグ情報またはエラー情報を表示するかどうか

//----------値を取得するために変数を使用します---------- --------
var $uploadfile;//アップロード後の一時ファイル
var $file_name;// ファイル名
var $file_size;// ファイルのサイズ
var $file_size_format;// フォーマットされた $file_size
var $file_type;//ファイルタイプ
var $debugstr="";//デバッグ情報を記録する
var $ err="";//エラー情報を記録する

//Constructor
//$uploadfieldアップロードされたファイル。複数のファイルをアップロードする場合は配列にすることができます
//$uploadpath ファイルのアップロード パス(配列にすることはできません)
/ /$maxsize は、アップロードされるファイルのサイズを制限します。複数のファイルをアップロードする場合には、配列にすることができます。 . // $ftype は、アップロードされるファイルの種類を制限します。 異なる種類のファイルを制限します。 // $ftype が 'all' の場合、タイプに制限なし
//使用する場合、$ftype の値を array('jpg,gif,png','swf','all') に設定して、3 つのアップロード ファイル制限タイプを表現できます。最初のファイルは jpg、gif、または png である必要があり、2 番目のファイルは swf である必要があり、3 番目のファイルは任意のタイプである必要があります
function Lwgupload($uploadfield="",$uploadpath="",$maxsize="",$ftype=) "すべて"){
$this->uploadfield=$uploadfield;
$this->uploadpath=$uploadpath;
$this->maxsize=$maxsize;
$this->ftype=$ftype;
}

//test() は、すべてアップロードできるかどうかをテストするために使用されます。そうでない場合は、何もアップロードしないでください
//$oldfile は、削除されるファイルを表し、更新に使用されます。古いファイルを削除して、新しいファイルをアップロードします
function test($oldfile= ''){
if ($this->uploadfield=="")return;if (empty($this->uploadpath))$this->uploadpath=dirname($_SERVER['PATH_TRANSLATED'])."/Upload";
if (empty($this->maxsize))$this ->maxsize=1048576;
if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);
// 配列でない場合は、便利な配列に変更しました 以下のコードを簡略化
$total_upload=count($this->uploadfield);//フィールドの総数を取得します

if (!is_array($this->maxsize)) $this->maxsize=array($this ->maxsize);//配列でない場合は配列に変更すると、後続のコードが簡略化されます
if (!is_array($this- >ftype))$this->ftype=array($this->ftype );//上と同じ

//対応するパスがない場合は作成
if (!file_exists($this-> ;uploadpath)){
if (!mkdir($this->uploadpath,0700))return Output( "エラー! 有効なパスを手動で作成してください。");
}

include_once(dirname(__FILE__)."/ Lwgfiletype.inc.php");
//このファイルには、ほとんどのファイルタイプを記録する配列変数 $filetype が含まれています 対応する拡張子

Set_time_limit(60);// タイムアウトを 60 秒に設定します

$needupload=array() ;//テスト後にアップロードできるファイル

for ($i=0;$i<$total_upload; $i++){
$this->uploadfile[$i]=$_FILES[$this->uploadfield [$i]]['tmp_name']; //一時ファイル
$this->file_name[$i ]=$_FILES[$this->uploadfield[$i]]['name']; name
$this->file_type[$i]=$_FILES[$this->uploadfield[$i ]]['type'] //Type
$this->file_lname[$i]=strto lower( substr( strrchr($this->file_name[$i], "." ), 1 )); / /拡張子
$this->file_size[$i]=$_FILES[$this->uploadfield[$] i]]['size']; // サイズ
$this->file_old[$i]= $_POST[$this->uploadfield[$i].'_old'] // 削除するファイル
$this->newfile[$i]=$this->uploadpath."/".$this ->file_name[$i];//アップロードされたアドレス

$maxsize=(!empty($this-> ;maxsize[$i]) && $this->gt;maxsize[$i]>0) ?$this->maxsize[$i]:$this->maxsize[0];

$maxsize_value=$ this->format_maxsize($maxsize);//$maxsize のフォーマット

$thetype= (!empty($this->ftype[$i]))?$this->ftype[$i]:$this ->ftype[0];
$ftype=array();
$lname= array();
if ($thetype!="all"){
$tmp_type=explode(",",$thetype);
for ($n=0;$n $tmp_t=trim($tmp_type[$n]);
if (!empty($tmp_t)){
$s_tmp= strto lower($tmp_t);
$ftype[]=$filetype[$s_tmp];
$lname[]=$s_tmp;
}
}
}
//現在のタイプを制限するパラメータを分析します

if (($ this->file_size[$i]==0)||($this->uploadfile[$i]=="")){
return $this->output($this->uploadfield[$ i]."無効なファイルまたは 0 バイトのファイルがアップロードされました。 ");
}

if ($thetype!="all" && !in_array($this->file_type[$i],$ftype) && !in_array($this->file_lname[$i],$ lname)){
return $this->output("申し訳ありません! アップロードされたファイル形式は '".$thetype."'." のみです);
}

if ($this->file_size[$i ] > $maxsize){
return $this->output("Sorry! File'".$this->file_name[$i]."' は '".$maxsize_Value."' より大きいです、アップロードに失敗しました. nファイルを「.$maxsize_Value」以内に減らして再試行してください。 ");
}

if (file_exists($this->newfile[$i])){
if ($oldfile=="" | | ($oldfile!="" && !in_array($this->newfile[$i],$oldfile)))return $this->output("Sorry! File'".$this->file_name [ $i]."'すでに存在します。アップロードに失敗しました。ファイル名を変更して再試行してください。");
//$oldfile は削除するファイルを表します。アップロードするファイルは存在しますが、削除されます。まだアップロードできます
}

if (in_array($this->file_name[$i],$needupload)){
//同じファイルを 2 つ以上のアップロード フィールドでアップロードすることはできません
return $this - >output("Sorry! File'".$this->file_name[$i]."'重複しています。アップロードに失敗しました。ファイル名を変更してもう一度お試しください。");
}
$needupload[]= $ this->file_name[$i];
}
Set_time_limit(30);//タイムアウトを 30 秒に設定します
return true;
}


//テストに合格したらアップロードできます
関数 Upload() {
if ($this->uploadfield=="")return false;
$total_upload=count($this->uploadfield);

for ($i=0;$i $this->file_size_format[$i]=$this->format_maxsize($this->file_size[$i]);

if (@move_uploaded_file($this->uploadfile[$i],$this) ->newfile[$i]))
$this->debugstr.="ファイル'".$this->ファイル名[$i]."'(".$this->ファイルサイズ形式[$i] .")アップロードに成功しました。
";
else {
if ($i>0)$this->err_del(($i-1),$this->newfile)
//ある場合1 つのアップロードに失敗すると、アップロードされたすべてのファイルが削除されます
return $this->output("Sorry! File'".$this->file_name[$i]."'アップロードに失敗しました。もう一度お試しください。" );
}
}
return true;
}

//ファイルサイズ番号をフォーマットします
function format_maxsize($value){
if ($value elseif ($ value else $maxsize_Value =number_format((double)($value/(1024*1024)),2 )."mb";
return $maxsize_Value;
}

//エラー後にアップロードされたファイルを削除する
function err_del($i,$thefile){
while ($i>=0){
if (@unlink ($thefile[$i])!=false)$this->debugstr.="ファイル'".$thefile[$i]."'正常に削除されました
";
$i--;
}
}

//エラー情報の記録と出力
function Output($msg){
if ($msg!="")$this->err=$msg;
if ($this->debug)echo " ";
return false;
}
}

/*
-----使い方---------------------- ------------------------
$obj=Lwgupload("image1","",1024*2,"all");
if ($obj - >test())$obj->upload();
-------------------------------- - --------------------------------------
*/
?>



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート