매우 고전적 인 PHP 파일 업로드 클래스 공유
10011 단어 PHP파일 업로드 클래스
<?php
/**
+-----------------------------------------------------------------------------
*
+-----------------------------------------------------------------------------
* @author Administrator
+-----------------------------------------------------------------------------
*/
class FileUpload{
private $filepath; //
private $allowtype=array('gif','jpg','jpeg','png','txt');
private $maxsize=1000000; //
private $israndname=true; //
private $orginame; //
private $tmpname; //
private $newname; //
private $filetype; //
private $filesize; //
private $errornum=''; //
private $errormsg; //
/**
+------------------------------------------------------------------------------
*
+------------------------------------------------------------------------------
* @param string $savepath
* @param string $allowtype
* @param string $maxsize
*
+------------------------------------------------------------------------------
*/
function __construct($option=array()){
foreach ($option as $key=>$value){
if (!in_array($key,get_class_vars(get_class($this)))){
continue;
}
$this->setOption($key, $value);
}
}
function uploadfile($field) {
$return=true;
if (!$this->CheckPath()) {
$this->errormsg=$this->geterrorNum();
return false;
}
$name=$_FILES[$field]['name'];
$tmpname=$_FILES[$field]['tmp_name'];
$filesize=$_FILES[$field]['size'];
$error=$_FILES[$field]['error'];
if (is_array($name)) {
$errors=array();
for ($i=0;$i<count($name);$i++){
if ($this->getFile($name[$i],$tmpname[$i],$filesize[$i],$errors[$i])) {
if (!$this->CheckSize() && !$this->CheckType()) {
$errors=$this->getErrorNum();
return false;
}
}else{
$errors=$this->getErrorNum();
return false;
}
if (!$return) {
$this->getFile();
}
}
if ($return) {
$fileNames=array();
for ($i=0;$i<count($name);$i++){
if ($this->getFile($name[$i], $tmpname[$i], $filesize[$i], $filesize[$i])) {
$this->SetFileName();
if (!$this->MoveFile()) {
$errors[]=$this->getErrorNum();
$return=false;
}else{
$fileNames[]=$this->getNewName();
}
}
}
$this->newname=$fileNames;
}
$this->errormsg=$errors;
return $return;
}else{
if($this->getFile($name,$tmpname,filesize,$error)){
if(!$this->CheckSize()){
return false;
}
if(!$this->CheckType()){
return false;
}
$this->SetFileName();
if ($this->MoveFile()) {
return true;
}
}else{
return false;
}
if (!$return) {
$this->setOption('ErrorNum', 0);
$this->errormsg=$this->geterrorNum();
}
return $return;
}
}
/**
+------------------------------------------------------------------------
*
+------------------------------------------------------------------------
* @param mix $key
* @param mix $value
*/
private function setOption($key,$value){
$key=strtolower($key);
$this->$key=$value;
}
/**
+---------------------------------------------------------------------------
*
+---------------------------------------------------------------------------
* @param string $name
* @param string $tmp_name
* @param number $size
* @param number $error
*/
private function getFile($name,$tmpname,$filetype,$filesize,$error=0){
$this->setOption('TmpName', $tmpname);
$this->setOption('OrgiName', $name);
$arrstr=explode('.', $name);
$this->setOption('FileType', $arrstr[count($arrstr)-1]);
$this->setOption('FileSize', $filesize);
return true;
}
/**
+-------------------------------------------------------------------------
*
+-------------------------------------------------------------------------
* @return boolean
*/
private function CheckPath(){
if(empty($this->filepath)){
$this->setOption('ErrorNum', -5);
return false;
}
if (!file_exists($this->filepath)||!is_writable($this->filepath)) {
if (!@mkdir($this->filepath,0755)) {
$this->setOption('ErrorNum',-4);
return false;
}
}
return true;
}
private function Is_Http_Post(){
if (!is_uploaded_file($this->tmpname)) {
$this->setOption('ErrorNum',-6);
return false;
}else{
return true;
}
}
/**
+--------------------------------------------------------------------
*
+--------------------------------------------------------------------
* @return boolean
*/
private function CheckSize(){
if ($this->filesize>$this->maxsize) {
$this->setOption('ErrorNum', -2);
return false;
}else{
return true;
}
}
/**
+---------------------------------------------------------------
*
+---------------------------------------------------------------
* @return boolean
*/
private function CheckType(){
if (in_array($this->filetype, $this->allowtype)) {
return true;
}else{
$this->setOption('ErrorNum', -1);
return false;
}
}
private function SetFileName(){
if ($this->israndname) {
$this->setOption('NewName', $this->RandName());
}else{
$this->setOption('NewName',$this->orginame);
}
}
/**
+-----------------------------------------------------------------
*
+------------------------------------------------------------------
*/
public function getNewName() {
return $this->newname;
}
private function RandName(){
$rule=date("YmdHis").rand(0, 999);
return $rule.'.'.$this->filetype;
}
private function MoveFile(){
if ($this->errornum) {
$filepath=rtrim($this->filaepath,'/').'/';
$filepath.=$this->newname;
if (@move_uploaded_file($this->tmpname,$filepath)) {
return true;
}else{
$this->errormsg=$this->setOption('ErrorNum',-3 );
}
}else{
return false;
}
}
/**
+----------------------------------------------------------------
*
+----------------------------------------------------------------
* @return string
*/
function getErrorNum() {
$erstr=" <font color='red'>{$this->orginame}</font> ";
switch ($this->errornum) {
case 4:
$erstr.=" ";
break;
case 3:
$erstr.=" ";
break;
case 2:
$erstr.=" HTML MAX_FILE_SIZE ";
break;
case 1:
$erstr.=" php.ini upload_max_filesize ";
break;
case 0:
$erstr=" {$this->orginame} ";
break;
case -1:
$erstr=" ";
break;
case -2:
$erstr.=" , {$this->maxsize} ";
break;
case -3:
$erstr.=" ";
break;
case -4:
$erstr=" , ";
break;
case -5:
$erstr=" ";
break;
case -6:
$erstr=" ";
break;
default:
$erstr.=" ";
}
return $erstr;
}
}
?>
이상 은 본 고의 모든 내용 이 므 로 여러분 이 phop 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.