PHP–複数ファイルのアップロード

ファイル名:filemulupload.php
ソースコード:
'ファイルのアップロードに失敗した、エラーが発生しない,正常にアップロード’,
1=>’ファイルのアップロードに失敗した,アップロードファイルは php.iniのupload_max_filesize値を超える’,
2=>’アップロードに失敗した,アップロードサイズはHTMLフォームの MAX_FILE_SIZE値を超える’,
3=>’アップロードに失敗した,一部ファイルはアップロードした’,
4=>’アップロードに失敗した,ファイルはアップロードされません’,
5=>’アップロードに失敗した,拡張子は許可されません’,
6=>’アップロードに失敗した,一時フォルダが見つかりません.PHP 4.3.10 とPHP 5.0.3の導入’,
7=>’アップロードに失敗した,ファイル書き込みに失敗.PHP 5.1.0導入’,
8=>’アップロードに失敗した,フォームフィードのNAMEを受け取っていません’,
9=>’アップロードに失敗した,不明なエラー’
);

public static function upload($name){
//受信したフォームフィールドのNameがあるかどうかを検出する
if(!isset($_FILES[$name])){
self::$wrong[]=8;
return false;
}
//三次元配列は二次元を単純化する
$files=array_shift($_FILES);
//拡張子を取得
$files=self::get_Ext($files);
//処理ファイル回数
$n=count($files['name’]);
for($i=0;$i<$n;$i++){ //現在のファイルが間違えるかどうかチェック、間違たら、次のファイルの処理をスキップして処理する         if($files['error'][$i]!=0){ self::$wrong[$i+1]=$files['error'][$i]; continue; } //ファイルの拡張子が許可するかどうか、許可しない場合、現在のファイルをスキップして次のファイルを処理する、 if(!in_array($files['name'][$i],self::$allowExt)){ self::$wrong[$i+1]=5; continue; } //パス $dir=self::time_Dir(); //ファイル名 $name=self::rand_Name(); //拡張子 $ext=$files['name'][$i]; //ファイル場所 $path=$dir.$name.$ext; //一時ファイルを移動し、失敗した場合、現在のファイルをスキップする if(!move_uploaded_file($files['tmp_name'][$i],$path)){ self::$wrong[$i]=9; continue; } //保存パス self::$path[$i+1]=strtr($path,array(ROOT=>"));

}
return self::$path;
}

//サフィックスメソッドを取得 
protected static function get_Ext($arr){
if(!is_array($arr) || !isset($arr['name’])){return false;}
foreach($arr['name’] as $k=>$v){
$arr['name’][$k]=strtolower(strrchr($v,’.’));
}
return $arr;
}
//日付に生成されたパス
protected static function time_Dir(){
$dir=ROOT.’Data/images/’.date('Y/m/d/’,time());
if(!is_dir($dir)){
mkdir($dir,0777,true);
}
return $dir;
}
//ランダムなファイルを生成する
protected static function rand_Name(){
$str=str_shuffle('1234567890qwertyuiopasdfghjklzxcvbnm’);
$str=substr($str,0,6);
return $str;
}
//エラーインターフェイス
public static function errors(){
foreach(self::$wrong as $k=>$v){
self::$wrong[$k]=’第’.$k.’個’.self::$error[$k];
}
return self::$wrong;
}

Source

Posted by arkgame