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

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

WBOY
WBOYオリジナル
2016-07-20 11:05:59805ブラウズ

単一ファイルと複数ファイルのアップロード コードを実際にサポートし、$_FILES[$field]['name'] 内の $_FILES[$field]['name'] を変数として使用できず、 name="userfile "という形式のファイル名でのみ使用できます。同じ欠点は $_FILES['userfile
']['name'] です。ここで、 は任意に選択できます。

//index.htm
1. 単一ファイルのアップロード



2. 複数ファイルのアップロード




;

------------------------------------------ ---------------------------------------------------- ------- ----------------------------------//upload.php


class File_upload{
public $upload_path='./upload/';//ファイルをアップロードするパス
public $allow_type=array();//アップロードが許可されているファイルの種類
public $ max_size='20480';//許可される最大ファイルサイズ
public $overwrite=false; //上書きモードに設定されているかどうか

public $renamed=false;//アップロードされたファイルの名前が直接使用されるか、システムによって使用されるか自動的に名前が付けられます🎜

/**
* プライベート変数
*/
private $upload_file=array();//アップロードに成功したファイルの情報を保存
private $upload_file_num=0;//アップロードに成功したファイルの数
private $succ_upload_file=array() ;/ /ファイル情報の保存に成功しました
/**
* コンストラクター
*
* @param string $upload_path
* @param string $allow_type
* @param string $max_size
*/
public function __construct($upload_path='./upload/',$allow_type='jpg|bmp|png|gif|jpeg',$max_size=' 204800 ')
{
$this->set_upload_path($upload_path);
$this->set_allow_type($allow_type);
$this->max_size=$max_size;
$this->get_upload_files();
}
/**
* アップロードパスを設定し、決定します
*
* @param string $path
*/
パブリック関数 set_upload_path($path)
{
if(file_exists($path)){
if(is_writeable($path)){
$this->upload_path=$パス ;
}else{
if(@chmod($path,'0666'))
$this->upload_path=$path;
}
}else{
if(@mkdir($path,'0666') ) {
$this->upload_path=$path;
}
}
}
//アップロードファイルの種類を設定します
public function set_allow_type($types){
$this->allow_type=explode("|", $types );
}
//ファイルをアップロードします
public function get_upload_files()
{
foreach ($_FILES AS $key=>$field)
{
$this->get_upload_files_detial($key);
}
}
//アップロードファイルのデータは配列に格納されます
public function get_upload_files_detial($field){
if(is_array($_FILES["$field"]['name']))
{
for($i=0) ;$i< ;count($_FILES[$field]['name']);$i++)
{
if(0==$_FILES[$field]['error'][$i])
{
$ this-> ;upload_file[$this->upload_file_num]['name']=$_FILES[$field]['name'][$i];
$this->upload_file[$this->upload_file_num] ['type ']=$_FILES[$field]['type'][$i];
$this->upload_file[$this->upload_file_num]['size']=$_FILES[$field][ 'サイズ' ][$i];
$this->upload_file[$this->upload_file_num]['tmp_name']=$_FILES[$field]['tmp_name'][$i];
$this- >upload_file [$this->upload_file_num]['error']=$_FILES[$field]['error'][$i];
$this->upload_file_num++;
}
}
}
else {
if( 0==$_FILES["$field"]['error'])
{
$this->upload_file[$this->upload_file_num]['name']=$_FILES["$field" ][' 名前'];
$this->upload_file[$this->upload_file_num]['type']=$_FILES["$field"]['type'];
$this->upload_file[ $this->upload_file_num]['size']=$_FILES["$field"]['size'];
$this->upload_file[$this->upload_file_num]['tmp_name']=$_FILES ["$ フィールド"]['tmp_name'];
$this->upload_file[$this->upload_file_num]['error']=$_FILES["$field"]['error'];
$this ->upload_file_num++;
}
}
}
/**
* アップロードされたファイルが指定された条件を満たしているか確認します
*
*/
public function check($i)
{
if(!empty($this->upload_file[$i]['name' ])) {
//ファイル サイズを確認します
if($this->upload_file[$i]['size']>$this->max_size*1024)$this->upload_file[$i][ 'error' ]=2;
//デフォルトのサーバーファイル名を設定します
$this->upload_file[$i]['f​​ilename']=$this->upload_path.$this->upload_file[$i] ['name '];
//ファイルパス情報を取得
$file_info=pathinfo($this->upload_file[$i]['name']);
//ファイル拡張子を取得
$file_ext=$file_info[' extension' ];
//ファイルの種類を確認してください
if(!in_array($file_ext,$this->allow_type))$this->upload_file[$i]['error']=5;
//必要名前を変更する
if($this->renamed){
list($usec, $sec) =explode(" ",microtime());
$this->upload_file[$i]['f​​ilename'] =$sec .substr($usec,2).'.'.$file_ext;
unset($usec);
unset($sec);
}
//ファイルが存在するかどうかを確認します
if(file_exists($this ->upload_file [$i]['f​​ilename'])){
if($this->overwrite){
@unlink($this->upload_file[$i]['f​​ilename']);
} else{
$ j=0;
do{
$j++;
$temp_file=str_replace('.'.$file_ext,'('.$j.').'.$file_ext,$this->upload_file[ $i][ 'filename']);
}while (file_exists($temp_file));
$this->upload_file[$i]['f​​ilename']=$temp_file;
unset($temp_file);
unset ($j) ;
}
}
//チェック完了
} else $this->upload_file[$i]['error']=6;
}
/**
* ファイルをアップロード
*
* @return true
*/
パブリック関数アップロード()
{
$upload_msg='';
for($i=0;$i<$this->upload_file_num;$i++)
{
if(!empty($this->upload_file[$i] ['name' ]))
{
//ファイルをチェックします
$this->check($i);
if (0==$this->upload_file[$i]['error'])
{
//ファイルをアップロードする
if(!@move_uploaded_file($this->upload_file[$i]['tmp_name'],$this->upload_file[$i]['f​​ilename']))
{
$upload_msg.='アップロードファイル '.$this->upload_file[$i]['name'].' エラー: '.$this->error($this->upload_file[$i]['error']).'!
';
}else
{
$this->succ_upload_file[]=$this->upload_file[$i]['ファイル名'];
$upload_msg.='ファイルをアップロード'.$this- >upload_file[$i]['name'].' 成功しました
';
}
}else $upload_msg.='ファイルをアップロード'.$this->upload_file[$i]['name' ]。 ' エラー:'.$this->error($this->upload_file[$i]['error']).'!
';
}
}
echo $upload_msg;
}
/ /エラーメッセージ
public function error($error)
{
switch ($error) {
case 1:
return 'ファイルサイズがphp.iniのupload_max_filesizeオプションで制限されている値を超えています';
break;
case 2 :
return 'ファイルのサイズが HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています';
break;
case 3:
return 'ファイルの一部のみがアップロードされました';
break;
case 4:
return 'ファイルはアップロードされませんでした' ;
break;
case 5:
return 'このファイルはアップロードできません';
break;
case 6:
return 'ファイル名が空です';
break;
default :
return 'Error';
break;
}
}
//成功データ情報を配列として取得(待機)
public function get_succ_file(){
return $this->succ_upload_file;
}
}
$upload=new File_upload('./upload/' ,'jpg|bmp|png|gif|jpeg');
$upload->upload();
$t=$upload->get_succ_file();
print_r($t);

?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445064.html技術記事これは、単一ファイルと複数ファイルのアップロード コードを真にサポートし、$_FILES[ $field ]['name'] が変数を使用できず、$_FILES[ 形式のファイル名 name= userfile とのみ一致できるという欠点を修正します。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。