ThinkPHP3.2.3多文件上傳,文件丟失問題的解決


描述

thinkphp多文件上傳時,有些時候會出現文件丟失的情況。比如上傳多個圖片,最終只上傳了一個圖片。本地測試的時候是正常的,但上傳到服務器上就會出現丟失文件這種情況。

 

原因

查看tp上傳類(ThinkPHP\Library\Think\Upload.class.php)的源碼,最終發現在getName()方法中會經過一些處理生成文件名,而tp官方默認使用時,傳的saveName參數為'saveName' => array('uniqid',''),而多個文件總是會生成一樣的文件名。

解決辦法

初步解決辦法是,在實例化\Think\Upload類后,設置此對象的saveName屬性為array('uniqid', array('', true)),如

$upload = new \Think\Upload();// 實例化上傳類
//其他屬性的設置,略...
//...

//在Upload類中,saveName屬性的缺省默認值是 array('uniqid', '')
$upload->saveName = array('uniqid', array('', true));

這樣可使getName()方法生成的文件名更具唯一性,從而避免多文件名重復覆蓋。
(在tp源碼中,當屬性saveName的值為array('uniqid',array('',true))時,此數組中第一個函數會作為函數名,第二個參數會作為這個函數的參數來運行,傳參為array('',true)時,使生成的文件名更具唯一性)

 

附上 uniqid函數的手冊 http://php.net/manual/zh/function.uniqid.php

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM