• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    ThinkPHP3.2文件上傳

    來源:懂視網 責編:小采 時間:2020-11-09 07:21:41
    文檔

    ThinkPHP3.2文件上傳

    ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp
    推薦度:
    導讀ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp

    多文件上傳支持

    如果需要使用多個文件上傳,只需要修改表單,把

    改為

    或者

    兩種方式的多附件上傳系統的文件上傳類都可以自動識別。

    上傳操作

    ThinkPHP文件上傳操作使用Think\Upload類,假設前面的表單提交到當前控制器的upload方法,我們來看下upload方法的實現代碼:

    1. publicfunction upload(){
    2. $upload =new \Think\Upload();// 實例化上傳類
    3. $upload->maxSize =3145728;// 設置附件上傳大小
    4. $upload->exts = array('jpg','gif','png','jpeg');// 設置附件上傳類型
    5. $upload->rootPath ='./Uploads/';// 設置附件上傳根目錄
    6. $upload->savePath ='';// 設置附件上傳(子)目錄
    7. // 上傳文件
    8. $info = $upload->upload();
    9. if(!$info){// 上傳錯誤提示錯誤信息
    10. $this->error($upload->getError());
    11. }else{// 上傳成功
    12. $this->success('上傳成功!');
    13. }
    14. }

    上傳類對圖片文件的上傳安全做了支持,如果企圖上傳非法的圖像文件,系統會提示 非法圖像文件。 為了更好的使用上傳功能,建議你的服務器開啟finfo模塊支持

    上傳參數

    在上傳操作之前,我們可以對上傳的屬性進行一些設置,Upload類支持的屬性設置包括:

    屬性 描述
    maxSize 文件上傳的最大文件大小(以字節為單位),0為不限大小
    rootPath 文件上傳保存的根路徑
    savePath 文件上傳的保存路徑(相對于根路徑)
    saveName 上傳文件的保存規則,支持數組和字符串方式定義
    saveExt 上傳文件的保存后綴,不設置的話使用原文件后綴
    replace 存在同名文件是否是覆蓋,默認為false
    exts 允許上傳的文件后綴(留空為不限制),使用數組或者逗號分隔的字符串設置,默認為空
    mimes 允許上傳的文件類型(留空為不限制),使用數組或者逗號分隔的字符串設置,默認為空
    autoSub 自動使用子目錄保存上傳文件 默認為true
    subName 子目錄創建方式,采用數組或者字符串方式定義
    hash 是否生成文件的hash編碼 默認為true
    callback 檢測文件是否存在回調,如果存在返回文件信息數組

    上面的屬性可以通過兩種方式傳入:

    實例化傳入

    我們可以在實例化的時候直接傳入參數數組,例如:

    1. $config = array(
    2. 'maxSize'=>3145728,
    3. 'rootPath'=>'./Uploads/',
    4. 'savePath'=>'',
    5. 'saveName'=> array('uniqid',''),
    6. 'exts'=> array('jpg','gif','png','jpeg'),
    7. 'autoSub'=>true,
    8. 'subName'=> array('date','Ymd'),
    9. );
    10. $upload =new \Think\Upload($config);// 實例化上傳類

    關于saveName和subName的使用后面我們會有詳細的描述。

    動態賦值

    支持在實例化后動態賦值上傳參數,例如:

    1. $upload =new \Think\Upload();// 實例化上傳類
    2. $upload->maxSize =3145728;
    3. $upload->rootPath ='./Uploads/';
    4. $upload->savePath ='';
    5. $upload->saveName = array('uniqid','');
    6. $upload->exts = array('jpg','gif','png','jpeg');
    7. $upload->autoSub =true;
    8. $upload->subName = array('date','Ymd');

    上面的設置和實例化傳入的效果是一致的。

    上傳文件信息

    設置好上傳的參數后,就可以調用Think\Upload類的upload方法進行附件上傳,如果失敗,返回false,并且用getError方法獲取錯誤提示信息;如果上傳成功,就返回成功上傳的文件信息數組。

    1. $upload =new \Think\Upload();// 實例化上傳類
    2. $upload->maxSize =3145728;// 設置附件上傳大小
    3. $upload->exts = array('jpg','gif','png','jpeg');// 設置附件上傳類型
    4. $upload->rootPath ='./Uploads/';// 設置附件上傳根目錄
    5. $upload->savePath ='';// 設置附件上傳(子)目錄
    6. // 上傳文件
    7. $info = $upload->upload();
    8. if(!$info){// 上傳錯誤提示錯誤信息
    9. $this->error($upload->getError());
    10. }else{// 上傳成功 獲取上傳文件信息
    11. foreach($info as $file){
    12. echo $file['savepath'].$file['savename'];
    13. }
    14. }

    每個文件信息又是一個記錄了下面信息的數組,包括:

    屬性 描述
    key 附件上傳的表單名稱
    savepath 上傳文件的保存路徑
    name 上傳文件的原始名稱
    savename 上傳文件的保存名稱
    size 上傳文件的大小
    type 上傳文件的MIME類型
    ext 上傳文件的后綴類型
    md5 上傳文件的md5哈希驗證字符串 僅當hash設置開啟后有效
    sha1 上傳文件的sha1哈希驗證字符串 僅當hash設置開啟后有效

    文件上傳成功后,就可以使用這些文件信息來進行其他的數據操作,例如保存到當前數據表或者單獨的附件數據表。

    例如,下面表示把上傳信息保存到數據表的字段:

    1. $model = M('Photo');
    2. // 取得成功上傳的文件信息
    3. $info = $upload->upload();
    4. // 保存當前數據對象
    5. $data['photo']= $info[0]['savename'];
    6. $data['create_time']= NOW_TIME;
    7. $model->add($data);

    單文件上傳

    upload方法支持多文件上傳,有時候,我們只需要上傳一個文件,就可以使用Upload類提供的uploadOne方法上傳單個文件,例如:

    1. publicfunction upload(){
    2. $upload =new \Think\Upload();// 實例化上傳類
    3. $upload->maxSize =3145728;// 設置附件上傳大小
    4. $upload->exts = array('jpg','gif','png','jpeg');// 設置附件上傳類型
    5. $upload->rootPath ='./Uploads/';// 設置附件上傳根目錄
    6. // 上傳單個文件
    7. $info = $upload->uploadOne($_FILES['photo1']);
    8. if(!$info){// 上傳錯誤提示錯誤信息
    9. $this->error($upload->getError());
    10. }else{// 上傳成功 獲取上傳文件信息
    11. echo $info['savepath'].$info['savename'];
    12. }
    13. }

    uploadOne方法上傳成功后返回的文件信息和upload方法的區別是只有單個文件信息的一維數組。

    上傳文件的命名規則

    上傳文件的命名規則(saveName)用于確保文件不會產生沖突或者覆蓋的情況。命名規則的定義可以根據你的業務邏輯來調整,不是固定的。例如, 如果你采用時間戳的方式來定義命名規范,那么在同時上傳多個文件的時候可能產生沖突(因為同一秒內可以上傳多個文件),因此你需要根據你的業務需求來設置 合適的上傳命名規則。這里順便來說下saveName參數的具體用法。

    一、采用函數方式

    如果傳入的字符串是一個函數名,那么表示采用函數動態生成上傳文件名(不包括文件后綴),例如:

    1. // 采用時間戳命名
    2. $upload->saveName ='time';
    3. // 采用GUID序列命名
    4. $upload->saveName ='com_create_guid';

    也可以采用用戶自定義函數

    1. // 采用自定義函數命名
    2. $upload->saveName ='myfun';

    默認的命名規則設置是采用uniqid函數生成一個唯一的字符串序列。

    saveName的值支持數組和字符串兩種方式,如果是只有一個參數或者沒有參數的函數,直接使用字符串設置即可,如果需要傳入額外的參數,可以使用數組方式,例如:

    1. // 采用date函數生成命名規則 傳入Y-m-d參數
    2. $upload->saveName = array('date','Y-m-d');
    3. // 如果有多個參數需要傳入的話 可以使用數組
    4. $upload->saveName = array('myFun',array('__FILE__','val1','val2'));

    如果需要使用上傳的原始文件名,可以采用__FILE__傳入,所以上面的定義規則,最終的結果是 myFun('上傳文件名','val1','val2')執行的結果。

    二、直接設置上傳文件名

    如果傳入的參數不是一個函數名,那么就會直接當做是上傳文件名,例如:

    1. $upload->saveName = time().'_'.mt_rand();

    表示上傳的文件命名采用時間戳加一個隨機數的組合字符串方式。

    當然,如果覺得有必要,你還可以固定設置一個上傳文件的命名規則,用于固定保存某個上傳文件。

    1. $upload->saveName ='ThinkPHP';

    三、保持上傳文件名不變

    如果你想保持上傳的文件名不變,那么只需要設置命名規范為空即可,例如:

    1. $upload->saveName ='';

    一般來說不建議保持不變,因為會導致相同的文件名上傳后被覆蓋的情況。

    子目錄保存

    saveName只是用于設置文件的保存規則,不涉及到目錄,如果希望對上傳的文件分子目錄保存,可以設置autoSubsubName參數來完成,例如:

    1. // 開啟子目錄保存 并以日期(格式為Ymd)為子目錄
    2. $upload->autoSub =true;
    3. $upload->subName = array('date','Ymd');

    可以使用自定義函數來保存,例如:

    1. // 開啟子目錄保存 并調用自定義函數get_user_id生成子目錄
    2. $upload->autoSub =true;
    3. $upload->subName ='get_user_id';

    和saveName參數一樣,subName的定義可以采用數組和字符串的方式。

    注意:如果get_user_id函數未定義的話,會直接以get_user_id字符串作為子目錄的名稱保存。

    子目錄保存和文件命名規則可以結合使用。

    上傳驅動

    上傳類可以支持不同的環境,通過相應的上傳驅動來解決,默認情況下使用本地(Local)上傳驅動,當然,你還可以設置當前默認的上傳驅動類型,例如:

    1. 'FILE_UPLOAD_TYPE'=>'Ftp',
    2. 'UPLOAD_TYPE_CONFIG'=> array(
    3. 'host'=>'192.168.1.200',//服務器
    4. 'port'=>21,//端口
    5. 'timeout'=>90,//超時時間
    6. 'username'=>'ftp_user',//用戶名
    7. 'password'=>'ftp_pwd',//密碼 ),

    表示當前使用Ftp作為上傳類的驅動,上傳的文件會通過FTP傳到指定的遠程服務器。

    也可以在實例化上傳類的時候指定,例如:

    1. $config = array(
    2. 'maxSize'=3145728,
    3. 'rootPath'='./Uploads/',
    4. 'savePath'='',
    5. 'saveName'= array('uniqid',''),
    6. 'exts'= array('jpg','gif','png','jpeg'),
    7. 'autoSub'=true,
    8. 'subName'= array('date','Ymd'),
    9. );
    10. $ftpConfig = array(
    11. 'host'=>'192.168.1.200',//服務器
    12. 'port'=>21,//端口
    13. 'timeout'=>90,//超時時間
    14. 'username'=>'ftp_user',//用戶名
    15. 'password'=>'ftp_pwd',//密碼 );
    16. $upload =new \Think\Upload($config,'Ftp',$ftpConfig);// 實例化上傳類

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    ThinkPHP3.2文件上傳

    ThinkPHP3.2文件上傳:上傳表單 在ThinkPHP中使用上傳功能無需進行特別處理。例如,下面是一個帶有附件上傳的表單提交: form action = __URL__/upload enctype = multipart/form-data method = post input type = text name = name / inp
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久国产精品一区二区| 国产成人无码精品一区在线观看| 精品视频在线v| 亚洲精品国产精品乱码不卡| 尤物国产在线精品福利一区| 精品久久久无码人妻中文字幕豆芽| 九九久久精品国产| 久久精品国产久精国产| 精品国产乱码久久久久久1区2区 | 在线观看91精品国产入口| 久久亚洲精品成人av无码网站| 欧美成人精品高清在线播放| 国产精品爱搞视频网站| 亚洲&#228;v永久无码精品天堂久久 | 国产精品视频二区不卡| 一本久久精品一区二区| 精品国产一区二区三区2021| 一区二区三区日韩精品| 久久福利青草精品资源站免费| CAOPORM国产精品视频免费| 久久精品人人做人人爽97| 最新精品露脸国产在线 | 国产精品99爱免费视频| 精品久久久久久中文字幕| 国产精品岛国久久久久| 国产精品亚洲精品日韩已满| 日韩精品人妻系列无码专区免费| 亚洲国产主播精品极品网红 | 亚洲国产一成人久久精品| 亚洲AV无码成人精品区狼人影院| 久久国产精品免费一区| 久久亚洲中文字幕精品一区| 欧美日韩综合精品| 四虎精品成人免费视频| 无码国模国产在线无码精品国产自在久国产 | 亚洲乱码精品久久久久..| 亚洲精品无码成人AAA片| 亚洲欧美国产∧v精品综合网| 野狼精品社区| 久久久久99精品成人片试看| 精品国产AV一区二区三区|