php實現常用文件上傳類

来源:http://www.cnblogs.com/yanshou/archive/2017/09/05/7482429.html
-Advertisement-
Play Games

1 _path = $path; 20 $this->_allowType = array( 21 // images 22 'bmp' => 'image/x-ms-bmp', 23 'jpg' => 'image/jpeg', 24 '... ...


  1 <?php
  2 /**
  3  * 上傳文件類
  4  * @param _path : 伺服器文件存放路徑
  5  * @param _allowType : 允許上傳的文件類型和所對應的MIME
  6  * @param _file : 上傳的文件信息
  7  */
  8 class Upload{
  9 
 10     private $_path;
 11     private $_allowType;
 12     private $_file;
 13     /**
 14      * 構造函數
 15      * @param string : 伺服器上存放上傳文件的路徑
 16      */
 17     function __construct( $path = '' )
 18     {
 19         $this->_path = $path;
 20         $this->_allowType = array(
 21                 // images
 22                 'bmp' => 'image/x-ms-bmp',
 23                 'jpg' => 'image/jpeg',
 24                 'jpeg' => 'image/jpeg',
 25                 'gif' => 'image/gif',
 26                 'png' => 'image/png',
 27                 'tif' => 'image/tiff',
 28                 'tiff' => 'image/tiff',
 29                 'tga' => 'image/x-targa',
 30                 'psd' => 'image/vnd.adobe.photoshop',
 31                 //文本
 32                 'txt' => 'text/plain',
 33                 'php' => 'text/x-php',
 34                 'html' => 'text/html',
 35                 'htm' => 'text/html',
 36                 'js' => 'text/javascript',
 37                 'css' => 'text/css',
 38                 'rtf' => 'text/rtf',
 39                 'rtfd' => 'text/rtfd',
 40                 'py' => 'text/x-python',
 41                 'java' => 'text/x-java-source',
 42                 'rb' => 'text/x-ruby',
 43                 'sh' => 'text/x-shellscript',
 44                 'pl' => 'text/x-perl',
 45                 'sql' => 'text/x-sql',
 46                 //應用
 47                 'exe' => 'application/octet-stream',
 48                 'doc' => 'application/vnd.ms-word',
 49                 'docx' => 'application/vnd.ms-word',
 50                 'xls' => 'application/vnd.ms-excel',
 51                 'ppt' => 'application/vnd.ms-powerpoint',
 52                 'pps' => 'application/vnd.ms-powerpoint',
 53                 'pdf' => 'application/pdf',
 54                 'xml' => 'application/xml',
 55                 //音頻
 56                 'mp3' => 'audio/mpeg',
 57                 'mid' => 'audio/midi',
 58                 'ogg' => 'audio/ogg',
 59                 'mp4a' => 'audio/mp4',
 60                 'wav' => 'audio/wav',
 61                 'wma' => 'audio/x-ms-wma',
 62                 //視頻
 63                 'avi' => 'video/x-msvideo',
 64                 'dv' => 'video/x-dv',
 65                 'mp4' => 'video/mp4',
 66                 'mpeg' => 'video/mpeg',
 67                 'mpg' => 'video/mpeg',
 68                 'mov' => 'video/quicktime',
 69                 'wm' => 'video/x-ms-wmv',
 70                 'flv' => 'video/x-flv',
 71                 'mkv' => 'video/x-matroska'
 72             );
 73     }
 74     /**
 75      * 上傳函數
 76      * @param  string : 表單元素的name 值
 77      * @return [type]
 78      */
 79     public function upload( $txtName = '' )
 80     {
 81         $this->_file = $_FILES[$txtName];
 82         if( $this->_file['error'] == 0){
 83             $fileType = end( explode('.', $this->_file['name'] ));
 84             $allowType = array();
 85             foreach( $this->_allowType as $item=>$value ){
 86                 $allowType[] = $item;
 87             }
 88             if( !in_array($fileType, $allowType)){
 89                 die('上傳的文件格式不正確!');
 90             }else{
 91                 if(move_uploaded_file($this->file['tmp_name'], ($this->path).$this->file['name']))
 92                     {
 93                         echo "<script>alert('上傳成功!')</script>";
 94                     }
 95                 else
 96                     {
 97                         echo "<script>alert('上傳失敗!');</script>";
 98                     }
 99             }
100 
101         }else{
102             //沒有正確上傳
103             switch ($this->file['error']){
104                 case 1:
105                     die('文件大小超過系統限制。');
106                     break;
107                 case 2:
108                     die('文件大小超過預定義限制。');
109                     break;
110                 case 3:
111                     die('文件為完全上傳。');
112                     break;
113                 case 4:
114                     die('未上傳任何文件。');
115                     break;
116                 default:
117                     die('上傳出錯');
118                     break;
119             }
120         }
121     }
122     //end upload
123 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 using System;//引入命名空間 2 namespace HelloWorldApplication //命名空間 3 { 4 class HelloWorld //類名 5 { 6 static void Main(string[] args) //主函數 7 { 8 /* 我的第一... ...
  • 靜態方法和非靜態方法的區別: 1.靜態方法不需要類實例化就可以調用,反之非靜態方法需要實例化後才能調用; 2.靜態方法只能訪問靜態成員和方法,非靜態方法都可以訪問; 3.靜態方法不能標記為override,導致派生類不能重寫,但是可以訪問; 4.靜態成員是在第一次使用時進行初始化。非靜態的成員是在創 ...
  • 1、簡述編譯型與解釋型語言的區別,且分別列出你知道的哪些語言屬於編譯型,哪些屬於解釋型? 編譯型是一次性將源碼翻譯成電腦可以讀懂的二進位,缺點是全部運行完才知道有問題的地方,要重新修改源碼,然後重新編譯,跨平臺性差如C、C++、Delphi等 解釋型是一句句的翻譯源碼,運行速度慢,但是源碼有問題可以 ...
  • 概述 for v in d.values(): for k,v in d.items(): for a in 'adfa': #判斷對象是否可迭代 from collections import Iterable isinstance('abc',Iterable) #添加下標 for x,y in ...
  • isinstance和issubclass isinstance()判斷一個對象是不是這個類的對象,傳兩個參數(對象,類) issubclass()判斷一個類是不是另一類的子類,傳兩個參數(子類,父類) class Foo: pass class Son(Foo): pass s = Son() # ...
  • 因為公司的需求,我使用了velocity模板進行文件生成。在這裡先記錄一下使用velocity模板時的一些小技巧: 1.截取字元串 註意,(1)需要使用.length()獲取字元串長度; (2)最好使用“+(-1)”的形式代替“-1”,因為velocity中對減號“-”的支持不友好,容易混淆。 2. ...
  • 先說下我自己的理解,一般而言,JSON字元串要轉為java對象需要自己寫一個跟JSON一模一樣的實體類bean,然後用bean.class作為參數傳給對應的方法,實現轉化成功。 上述這種方法太麻煩了。其實有一種東西叫jsonObject可以直接不用新建實體類bean,而實現轉化,先說org.json ...
  • 一、subprocess模塊 os.system 輸出命令結果到屏幕,返回命令執行狀態 使用方式為: res=os.system('dir') 結果顯示為: 結果顯示為: 驅動器 C 中的捲是 WINDOWS 捲的序列號是 CC81-05A6 C:\Users\zhao 的目錄 2017/07/12 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...