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;
}