一个简单的php文件上传类,可以自定义文件名,可以设置允许上传的文件类型等,有需要的朋友,可以参考学习下。
代码如下: <?php /** * 文件上传类 * bbs.it-home.org * */ class UpFile{ private $filePath; //文件目的路径 private $fileField; //默认$_FILES[$fileField],通过$_FILES环境变量获取上传文件信息 private $originName; //源文件名 private $tmpFileName; //临时文件名 private $fileType; //文件类型 private $fileSize; //文件大小 private $newFileName; //新文件名 private $allowType=array('jpg','gif','png'); // private $maxSize=2000000; //允许文件上传的最大度是2M private $isUserDefName=false; //是否采用用户自定义名 private $userDefName; //用户定义名称 private $isRandName=true; //是否随机命名 private $randName; //系统随机名称 private $errorNum=0; //错误号 private $isCoverModer=true; //是否覆盖模式 function __construct($options=array()){ $this->setOptions($options); //设置上传时属性列表 } function uploadFile($filefield){ $this->setOption('errorNum',0); //设置错误位 $this->setOption('fileField',$filefield); //设置fileField $this->setFiles(); //设置文件信息 $this->checkValid(); //判断合法性 $this->checkFilePath(); //检查文件路径 $this->setNewFileName(); //设置新的文件名 if($this->errorNum<0) return $this->errorNum; return $this->copyFile(); //上传文件 } private function setOptions($options=array()){ foreach ($options as $key=>$val){ if(!in_array($key,array('filePath','fileField','originName','allowType','maxSize','isUserDefName','userDefName','isRandName','randName'))) continue; $this->setOption($key,$val); } } private function setFiles(){ if($this->getFileErrorFromFILES!=0){ $this->setOptions('errorNum',-1); return $this->errorNum; } $this->setOption('originName',$this->getFileNameFromFILES()); $this->setOption('tmpFileName',$this->getTmpFileNameFromFILES()); $this->setOption('fileType',$this->getFileTypeFromFILES()); $this->setOption('fileSize',$this->getFileSizeFromFILES()); } private function setOption($key,$val){ $this->$key=$val; } private function setNewFileName(){ if($this->isRandName==false&&$this->isUserDefName==false){ $this->setOption('newFileName',$this->originName); }elseif ($this->isRandName==true&&$this->isUserDefName=false){ $this->setOption('newFileName',$this->proRandName().'.'.$this->fileType); }elseif ($this->isRandName==false&&$this->isUserDefName=true){ $this->setOption('newFileName',$this->userDefName); }else { $this->setOption('errorNum',-4); } } private function checkValid(){ $this->checkFileSize(); $this->checkFileType(); } private function checkFileType(){ if(!in_array($this->fileType,$this->allowType)){ $this->setOption('errorNum',-2); }else { return $this->errorNum; } } private function checkFileSize(){ if($this->fileSize>$this->maxSize){ $this->setOption('errorNum',-3); }else { return $this->errorNum; } } private function checkFilePath(){ if(!file_exists($this->filePath)){ if($this->isCoverModer){ $this->makePath(); }else { $this->setOption('errorNum',-6); } } } private function proRandName(){ $tmpStr= "abcdefghijklmnopqrstuvwxyz0123456789"; $str=""; for ($i=0;$i<8;$i++){ $num=rand(0,strlen($tmpStr)); $str.=$tmpStr[$num]; } return $str; } private function makePath(){ if(!@mkdir($this->filePath,0755)){ $this->setOption('errorNum',-7); } } private function copyFile(){ $filePath=$this->filePath; if($filePath[strlen($filePath)-1]!='/'){ $filePath.='/'; } $filePath.=$this->newFileName; if(!@move_uploaded_file($this->tmpFileName,$filePath)){ $this->setOption('errorNum',-5); } return $this->errorNum; } function getNewFileName(){ return $this->newFileName; } private function getFileErrorFromFILES(){ return $this->fileField['error']; } private function getFileTypeFromFILES(){ $str=$this->fileField['name']; $aryStr=split("\.",$str); //将字符串分割到数组中 $ret=strtolower($aryStr[count($aryStr)-1]); return $ret; } private function getFileNameFromFILES(){ return $this->fileField['name']; } private function getTmpFileNameFromFILES(){ return $this->fileField['tmp_name']; } private function getFileSizeFromFILES(){ return $this->fileField['size']; } public function getErrorMsg(){ $str="上传文件出错:"; switch ($this->errorNum){ case -1: $str.="未知错误!"; break; case -2: $str.="未允许类型!"; break; case -3: $str.="文件过大!"; break; case -4: $str.="产生文件名出错!"; break; case -5: $str.="上传失败!"; break; case -6: $str.="目录不存在!"; break; case -7: $str.="建立目录失败!"; break; } return $str; } } ?> |

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版