ホームページ > バックエンド開発 > PHPチュートリアル > 複数のファイルのアップロードを実装する php class_PHP チュートリアル

複数のファイルのアップロードを実装する php class_PHP チュートリアル

WBOY
リリース: 2016-07-13 16:56:21
オリジナル
886 人が閲覧しました

複数ファイルのアップロードは PHP の基本的なアプリケーションです。この問題は、PHPer が遭遇する問題です。このクラスは、さまざまな場所で使用できるでしょう。 。

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

クラスのアップロード{

var $saveName // 名前を保存します
var $savePath // パスを保存します
var $fileFormat = array('gif','jpg','doc','application/octet-stream');//ファイル形式と MIME の制限
var $overwrite = 0 // 上書きモード
; var $maxSize = 0;//ファイルの最大バイト数
var $ext;//ファイル拡張子
var $thumb = 0 // サムネイルを生成するかどうか
; var $thumbWidth = 130 // サムネイルの幅
; var $thumbHeight = 130 // サムネイルの高さ
; var $thumbPrefix = "_thumb_" // サムネイルのプレフィックス
; var $errno // エラーコード
var $returnArray= array();//全ファイルの情報を返す
var $returninfo= array() // 各ファイルの情報を返します
;

//コンストラクター
// @param $savePath ファイルの保存パス
// @param $fileFormat ファイル形式制限配列
// @param $maxSize 最大ファイルサイズ
// @param $overwritet 上書きするかどうか 1 上書き許可 0 上書き禁止

関数 Upload($savePath, $fileFormat='',$maxSize = 0, $overwrite = 0) {

$this->setSavepath($savePath);
$this->setFileformat($fileFormat);
$this->setMaxsize($maxSize);
$this->setOverwrite($overwrite);
$this->setThumb($this->thumb, $this->thumbWidth,$this->thumbHeight);
$this->errno = 0;
}

//アップロード

// @param $fileInput Web ページの入力の名前 Form
// @param $changeName ファイル名を変更するかどうか
関数 run($fileInput,$changeName = 1){
if(isset($_FILES[$fileInput])){
$fileArr = $_FILES[$fileInput];
If(is_array($fileArr['name'])){//同じファイル ドメイン名を持つ複数のファイルをアップロードします
for($i = 0; $i $ar['tmp_name'] = $fileArr['tmp_name'][$i];
$ar['name'] = $fileArr['name'][$i];
$ar['type'] = $fileArr['type'][$i];
$ar['size'] = $fileArr['size'][$i];
$ar['error'] = $fileArr['error'][$i];
$this->getExt($ar['name']);//拡張子を取得して $this->ext に割り当てます。次のサイクルで更新されます
$this->setSavename($changeName == 1 ? '' : $ar['name']);//保存ファイル名を設定します
If($this->copyfile($ar)){
$this->returnArray[] = $this->returninfo;
}その他{
$this->returninfo['error'] = $this->errmsg();
$this->returnArray[] = $this->returninfo;
}
}
$this->errno を返しますか? false : true;
}else{//単一のファイルをアップロードします
$this->getExt($fileArr['name']);//拡張子を取得します
$this->setSavename($changeName == 1 ? '' : $fileArr['name']);//保存ファイル名を設定します
If($this->copyfile($fileArr)){
$this->returnArray[] = $this->returninfo;
}その他{
$this->returninfo['error'] = $this->errmsg();
$this->returnArray[] = $this->returninfo;
}
$this->errno を返しますか? false : true;
}
false を返します;
}その他{
$this->errno = 10;
false を返します;
}
}

//単一ファイルのアップロード
// @param $fileArray ファイル情報配列
関数 copyfile($fileArray){
$this->returninfo = array();
//情報を返す
$this->returninfo['name'] = $fileArray['name'];
$this->returninfo['md5'] = @md5_file($fileArray['tmp_name']);
$this->returninfo['saveName'] = $this->saveName;
$this->returninfo['size'] =number_format( ($fileArray['size'])/1024 , 0, '.', ' ');//KB 単位
$this->returninfo['type'] = $fileArray['type'];
// ファイル形式をチェックします
if (!$this->validateFormat()){
$this->errno = 11;
false を返します;
}
// ディレクトリが書き込み可能かどうかを確認します
if(!@is_writable($this->savePath)){
$this->errno = 12;
false を返します;
}
// 上書きが許可されていない場合は、ファイルが既に存在するかどうかを確認します
//if($this->overwrite == 0 && @file_exists($this->savePath.$fileArray['name'])){
// $this->errno = 13;
// false を返します;
//}
// サイズ制限がある場合は、ファイルが制限を超えているかどうかを確認します
if ($this->maxSize != 0 ){
if ($fileArray["size"] > $this->maxSize){
$this->errno = 14;
false を返します;
}
}
//ファイルアップロード
if(!@move_uploaded_file($fileArray["tmp_name"], $this->savePath.$this->saveName)){
$this->errno = $fileArray["error"];
false を返します;
}elseif( $this->thumb ){// サムネイルを作成します
$CreateFunction = "imagecreatefrom".($this->ext == 'jpg' ? 'jpeg' : $this->ext);
$SaveFunction = "画像".($this->ext == 'jpg' ? 'jpeg' : $this->ext);
if (strto lower($CreateFunction) == "imagecreatefromgif"
&& !function_exists("imagecreatefromgif")) {
$this->errno = 16;
false を返します;
elseif (strto lower($CreateFunction) == "imagecreatefromjpeg"
&& !function_exists("imagecreatefromjpeg")) {
$this->errno = 17;
false を返します;
elseif (!function_exists($CreateFunction)) {
$this->errno = 18;
false を返します;
}

$Original = @$CreateFunction($this->savePath.$this->saveName);
if (!$Original) {$this->errno = 19; }
$originalHeight = ImageSY($Original);
$originalWidth = ImageSX($Original);
$this->returninfo['originalHeight'] = $originalHeight;
$this->returninfo['originalWidth'] = $originalWidth;
/*
if (($originalHeight 親指の高さ
&& $originalWidth < $this->thumbWidth)) {
// サムネイルが予想より小さい場合は、コピーしてください
Move_uploaded_file($this->savePath.$this->saveName,
$this->savePath.$this->thumbPrefix.$this->saveName);
} その他 {
If( $originalWidth > $this->thumbWidth ){// 幅 > 幅を設定します
$thumbWidth = $this->thumbWidth ;
$thumbHeight = $this->thumbWidth * ( $originalHeight / $originalWidth );
If($thumbHeight > $this->thumbHeight){// 高さ > 高さを設定します
$thumbWidth = $this->thumbHeight * ( $thumbWidth / $thumbHeight );
$thumbHeight = $this->thumbHeight ;
}
}elseif( $originalHeight > $this->thumbHeight ){// 高さ > 高さを設定します
$thumbHeight = $this->thumbHeight ;
     $thumbWidth = $this->thumbHeight * ( $originalWidth / $originalHeight );
     if($thumbWidth > $this->thumbWidth){// 宽 > 設定宽度
      $thumbHeight = $this->thumbWidth * ( $thumbHeight / $thumbWidth );
      $thumbWidth = $this->thumbWidth ;
     }
    }
    */
    $radio=max(($originalWidth/$this->thumbWidth),($originalHeight/$this->thumbHeight));
    $thumbWidth=(int)$originalWidth/$radio;
    $thumbHeight=(int)$originalHeight/$radio;

if ($thumbWidth == 0) $thumbWidth = 1;
    if ($thumbHeight == 0) $thumbHeight = 1;
    $createdThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
    if ( !$createdThumb ) {$this->errno = 20; false を返します;}
    if ( !imagecopyresampled($createdThumb, $Original, 0, 0, 0, 0,
     $thumbWidth, $thumbHeight, $originalWidth, $originalHeight) )
     {$this->エラー番号 = 21; false を返します;}
    if ( !$SaveFunction($createdThumb,
     $this->savePath.$this->thumbPrefix.$this->saveName) )
     {$this->エラー番号 = 22; false を返します;}
   
  }
  // 删除临時文件
  /*
  if(!@$this->del($fileArray["tmp_name"])){
   false を返します;
  }
  */
  true を返します;
 }

// 文件格式查,MIME检测
 関数 validateFormat(){
  if(!is_array($this->fileFormat)
   || in_array(strto lower($this->ext), $this->fileFormat)
   || in_array(strto lower($this->returninfo['type']), $this->fileFormat) )
   true を返します;
  それ以外
   false を返します;
 }
// 获取文件扩展名
// @param $fileName 上のファイルの原文ファイル名
 関数 getExt($fileName){
  $ext =explode(".", $fileName);
  $ext = $ext[カウント($ext) - 1];
  $this->ext = strto lower($ext);
 }

// 設置上送信文書の最大文字数制限
// @param $maxSize 文件大小(bytes) 0:表示無制限
 関数 setMaxsize($maxSize){
  $this->maxSize = $maxSize;
 }
// 設置文件格式限定
// @param $fileFormat 文件格式数组
 関数 setFileformat($fileFormat){
  if(is_array($fileFormat)){$this->fileFormat = $fileFormat ;}
 }

// 設置覆盖モード
// @param overwrite 覆盖モード 1:允许覆盖 0:禁止覆盖
 関数 setOverwrite($overwrite){
  $this->overwrite = $overwrite;
 }


// 設置保存経路
// @param $savePath 文件保存路径:以 "/" 结尾,若没有 "/",则补上
 関数 setSavepath($savePath){
  $this->savePath = substr( str_replace("","/", $savePath) , -1) == "/"
  ? $savePath : $savePath."/";
 }

// 設置缩略图
// @param $thumb = 1 生成缩略図 $thumbWidth,$thumbHeight は缩略図の宽と高
 関数 setThumb($thumb, $thumbWidth = 0,$thumbHeight = 0){
  $this->thumb = $thumb;
  if($thumbWidth) $this->thumbWidth = $thumbWidth;
  if($thumbHeight) $this->thumbHeight = $thumbHeight;
 }

// 设置文件保存名
// @param $saveName 保存名、空の場合、システム自動生成一個の随机のファイル名
 関数 setSavename($saveName){
  if ($saveName == ''){ // 如果未設置文件名,则一个随机文件名
   $name = date('YmdHis')."_".rand(100,999).'.'.$this->ext;
   // 文書が存在するかどうかを判断し、不允许重复文書
   if(file_exists($this->savePath . $name)){
    $name = setSavename($saveName);
    }
  } その他 {
   $name = $saveName;
  }
  $this->saveName = $name;
 }

// 删除文件
// @param $fileName 希望删除的文書名
 関数 del($fileName){
  if(!@unlink($fileName)){
   $this->errno = 15;
   false を返します;
  }
  true を返します;
 }

// 上送信文の情報を返します
 関数 getInfo(){
  return $this->returnArray;
 }

// 错误情報を入手
 関数 errmsg(){
  $uploadClassError = array(
   0 =>'エラーはなく、ファイルは正常にアップロードされました。 '、
   1 =>'アップロードされたファイルは php.ini の Upload_max_filesize ディレクティブを超えています。',
   2 =>'アップロードされたファイルは、HTML フォームで指定された MAX_FILE_SIZE を超えています。',
   3 =>'アップロードされたファイルは部分的にのみアップロードされました。 '、
   4 =>'ファイルはアップロードされませんでした。 '、
   6 =>'一時フォルダーが見つかりません。 PHP 4.3.10 および PHP 5.0.3 で導入されました。 '、
   7 =>'ファイルをディスクに書き込めませんでした。 PHP 5.1.0で導入されました。 '、
   10 =>'入力名が利用できないわけではありません!',
   11 =>'アップロードされたファイルは許可されません!',
   12 =>'ディレクトリに書き込みできません!',
   13 =>'ファイルはすでに存在します!',
   14 =>'ファイルが大きすぎます!',
   15 =>'ファイルの削除に失敗しました!',
   16 =>'お使いの PHP のバージョンでは GIF サムネイルがサポートされていないようです。',
   17 =>'お使いの PHP のバージョンでは JPEG サムネイルがサポートされていないようです。',
   18 =>'お使いの PHP のバージョンでは、画像のサムネイルがサポートされていないようです。',
   19 =>'ソース画像をコピーしようとしたときにエラーが発生しました。
     お使いの php のバージョン ('.phpversion().') では、この画像タイプがサポートされていない可能性があります。',
   20 =>'新しいイメージを作成しようとしたときにエラーが発生しました。',
   21 =>'ソース画像をサムネイル画像にコピー中にエラーが発生しました。',
   22 =>'サムネイル画像をファイルシステムに保存中にエラーが発生しました。
     このフォルダーに対する読み取りアクセスと書き込みアクセスの両方が PHP に設定されていることを確認していますか?',
   );
  if ($this->errno == 0)
   false を返します;
  それ以外
   return $uploadClassError[$this->errno];
 }
}

?>
この类呢をどのように使用しますか?

//表転送のパラメータを受信した場合は上流処理を実行し、表転送を表示しない場合は
if(isset($_FILES['uploadinput'])){
 //建目录関数数,その中のパラメータ$directoryName最終后没有"/",
 //要是有的话,以'/'打散的数組的時候,最后会出现一空值
 関数 makeDirectory($ディレクトリ名) {
  $directoryName = str_replace("","/",$directoryName);
  $dirNames =explode('/', $directoryName);
  $total = count($dirNames) ;
  $temp = '';
  for($i=0; $i<$total; $i++) {
   $temp .= $dirNames[$i].'/';
   if (!is_dir($temp)) {
    $oldmask = umask(0);
    if (!mkdir($temp, 0777)) exit(" 建立目录 $temp");
    umask($oldmask);
   }
  }
  true を返します;
 }

if($_FILES['uploadinput']['name'] <> ""){
//アップロードファイルクラスが含まれます
require_once ('upload_class.php');
//ファイルアップロードディレクトリを設定します
$savePath = "アップロード";
//ディレクトリを作成します
makeDirectory($savePath);
//許可されるファイルの種類
$fileFormat = array('gif','jpg','jpge','png');
//ファイルサイズ制限、単位: バイト、1KB = 1000 バイト
//0は制限がないことを意味しますが、php.iniのupload_max_filesize設定の影響を受けます
$maxSize = 0;
//元のファイルを上書きしますか? 0 許可されない 1 許可される
$overwrite = 0;
//アップロードクラスを初期化します
$f = 新しいアップロード($savePath, $fileFormat, $maxSize, $overwrite);
//サムネイルを生成したい場合は、メンバー関数 $f->setThumb();
を呼び出します //パラメータリスト: setThumb($thumb, $thumbWidth = 0,$thumbHeight = 0)
//$thumb=1 はサムネイルを生成することを意味します。呼び出されない場合、その値は 0 です
//$thumbWidth サムネイルの幅、単位はピクセル (px)、空白のままにしてデフォルト値の 130 を使用します
//$thumbHeight サムネイルの高さ、単位はピクセル (px)、空白のままにした場合、デフォルト値の 130 を使用します
$f->setThumb(1);

//パラメータのuploadinputは、フォームにファイルをアップロードするための入力ボックスの名前です
//次の 0 はファイル名が変更されないことを意味し、1 の場合はシステムがランダムなファイル名を生成します
。 if (!$f->run('uploadinput',1)){
//最後のエラー メッセージは、$f->errmsg(),
を介してのみ取得できます。 //詳細情報は$f->getInfo()で取得可能。
echo $f->errmsg()."
n";
}
//アップロード結果は配列 returnArray に保存されます。
echo "

";<br>
print_r($f->getInfo());<br>
echo "
";
}
}その他{
?>

このファイルを送信してください:









}

?>

http://www.bkjia.com/PHPjc/631597.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/631597.html技術記事マルチファイルのアップロードは PHP の基本的なアプリケーションですが、PHP を使用する人にとっては必ず遭遇する問題です。このクラスをどこで使用できるかを皆さんに紹介します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート