接解決上傳文件失敗后,網上找了一段不錯的(比較全面且嚴謹)PHP后臺實現文件處理的代碼,并解決原來代碼中兩個錯誤后記錄如下:
需要修改的字段有$filename,$filemax,$filepath,其余基本不需要再做修改了
<?php
class upload{
protected $filename;//文件名
protected $fileMine;//文件上傳類型
protected $filepath;//文件上傳路徑
protected $filemax;//文件上傳大小
protected $fileExt;//文件上傳格式
protected $fileerror;//文件出錯設置
protected $fileflag;//文件檢測
protected $fileinfo; //FILES
protected $ext; //文件擴展
protected $path;
//文件上傳
public function __construct($filename="N_File",$filemax=5000000,$filepath="Notices",$fileflag=true,$fileExt=array('gif','jpeg','pjpeg','jpg','png'),$fileMine=array('image/gif','image/jpeg','image/pjpeg','image/jpg','image/png'))
{
$this->filename=$filename;
$this->fileinfo=$_FILES[$this->filename];
$this->filemax=$filemax;
$this->filepath=$filepath;
$this->fileflag=$fileflag;
$this->fileExt=$fileExt;
$this->fileMine=$fileMine;
//var_dump($this->filename);
}
//錯誤判斷
public function UpError(){
if($this->fileinfo['error']>0){
switch($this->fileinfo['error'])
{
case 1:
$this->fileerror="上傳文件大小超過服務器允許上傳的最大值,php.ini中設置upload_max_filesize選項限制的值 ";
break;
case 2:
$this->fileerror="上傳文件大小超過HTML表單中隱藏域MAX_FILE_SIZE選項指定的值";
break;
case 3:
$this->fileerror="文件部分被上傳";
break;
case 4:
$this->fileerror="沒有選擇上傳文件";
break;
case 5:
$this->fileerror="未找到臨時目錄";
break;
case 6:
$this->fileerror="文件寫入失敗";
break;
case 7:
$this->fileerror="php文件上傳擴展沒有打開";
break;
case 8:
$this->fileerror="";
break;
}
return false;
}
return true;
}
//檢測文件類型
public function UpMine(){
if(!in_array($this->fileinfo['type'],$this->fileMine)) {
$this->error="文件上傳類型不對";
return false;
}
return true;
}
//檢測文件格式
public function UpExt(){
$this->ext=pathinfo($this->fileinfo['name'],PATHINFO_EXTENSION);
//var_dump($ext);
if(!in_array($this->ext,$this->fileExt)){
$this->fileerror="文件格式不對";
return false;
}
return true;
}
//檢測文件路徑
public function UpPath(){
$mtime=date('Y-m-d');
$this->filepath=$this->filepath.'/'.$mtime;
if(!file_exists($this->filepath)){
mkdir($this->filepath,0777,true);
}
}
//檢測文件大小
public function UpSize(){
$max=$this->fileinfo['size'];
if($max>$this->filemax){
$this->fileerror="文件過大";
return false;
}
return true;
}
//檢測文件是否HTTP
public function UpPost(){
if(!is_uploaded_file($this->fileinfo['tmp_name'])){
$this->fileerror="惡意上償還";
return false;
}
return true;
}
//文件名防止重復
public function Upname(){
return md5(uniqid(microtime(true),true));
}
//圖片縮略圖
public function Smallimg($x=300,$y=300){
$imgAtt=getimagesize($this->path);
//圖像寬,高,類型
$imgWidth=$imgAtt[0];
$imgHeight=$imgAtt[1];
$imgext=$imgAtt[2];
//等比列縮放
if(($x/$imgWidth)>($y/$imgHeight)){
$bl=$y/$imgHeight;
}else{
$bl=$x/$imgWidth;
}
$x=floor($imgWidth*$bl); //縮放后
$y=floor($imgHeight*$bl);
$images=imagecreatetruecolor($x,$y);
switch($imgext){
case 1:
$imageout=imagecreatefromgif($this->path);
break;
case 2:
$imageout=imagecreatefromjpeg($this->path);
break;
case 3:
$imageout=imagecreatefrompng($this->path);
break;
default:
$imageout=imagecreatefromjpeg($this->path);
}
imagecopyresized($images,$imageout,0,0,0,0,$x,$y,$imgWidth,$imgHeight);
$names=$this->Upname();
$this->path=$this->filepath.'/'. $names.'.'.$this->ext;
imagejpeg($images,$this->path);
return $this->path;
}
//文件上傳
public function uploads()
{
if($this->UpError()&&$this->UpMine()&&$this->UpExt()&&$this->UpSize()&&$this->UpPost()){
$this->UpPath();
$names=$this->Upname();
$this->path=$this->filepath.'/'. $names.'.'.$this->ext;
if(move_uploaded_file($this->fileinfo['tmp_name'], $this->path)){
return $this->path;
}else{
$this->fileerror="上傳失敗";
}
}else{
exit("<b>".$this->fileerror."</b>");
}
}
}
?>
調用很簡單,在文件上傳檢查的PHP頁面加入:
$u=new upload();
$a=$u->uploads();
$c=$u->Smallimg();
echo "<a href='$a'><img src='$c' /></a>"