『壹』 php文件上傳,提示移動文件失敗
php文件上傳,提示移動文件失敗,基本是上傳保存的目錄不可寫造成的,需要好好設置一下,下面是一個PHP文件上傳的簡單例子,僅作參考:
<formaction=""enctype="multipart/form-data"method="post"
name="uploadfile">上傳文件:<inputtype="file"name="upfile"/><br>
<inputtype="submit"value="上傳"/></form>
<?php
//print_r($_FILES["upfile"]);
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//獲取數組裡面的值
$name=$upfile["name"];//上傳文件的文件名
$type=$upfile["type"];//上傳文件的類型
$size=$upfile["size"];//上傳文件的擾塌基大小
$tmp_name=$upfile["tmp_name"];//上傳文件的臨時存放路徑
//判斷是否為圖片
switch($type){
case'image/pjpeg':$okType=true;
break;
case'image/jpeg':$okType=true;
break;
case'image/gif':$okType=true;
break;
case'image/png':$okType=true;
break;
}
if($okType){
/**
*0:文件上傳成功<br/>
*1:超過了文件大小,在php.ini文件中設置<br/>
*2:超過了文件的大小MAX_FILE_SIZE選項指定的值<br/>
*3:文件只有部分被上傳<br/>
*4:沒有文件被上傳<br/>
*5:上傳文件大小為0
*/
$error=$upfile["error"];//上傳後系統返回的值
echo"================<br/>";
echo"上傳文件名稱是:".$name."<br/>";
echo"上傳文件類型是:".$type."<br/>";
echo"上傳文件大小是:".$size."<br/>";
echo"上傳後系統返回的值是:".$error."<br/>";
echo"上傳文件的臨時存放路徑是:".$tmp_name."<br/>";
echo緩謹"開始移動上傳文件<br/>";
//把上傳的臨時文件移動到up目錄下面
move_uploaded_file($tmp_name,'up/'.$name);
$destination="up/".$name;
echo"================<br/>";
echo"上傳信息:<br/>";
if($error==0){
echo"文件上傳成功啦!";
echo"<br>圖片預覽:<br>";
echo"<imgsrc=".$destination.">";
//echo"alt="圖片預覽: 文件名:".$destination." 上傳時間:">";
}elseif($error==1){
echo"超衫余過了文件大小,在php.ini文件中設置";
}elseif($error==2){
echo"超過了文件的大小MAX_FILE_SIZE選項指定的值";
}elseif($error==3){
echo"文件只有部分被上傳";
}elseif($error==4){
echo"沒有文件被上傳";
}else{
echo"上傳文件大小為0";
}
}else{
echo"請上傳jpg,gif,png等格式的圖片!";
}
}
?>
『貳』 php 圖片上傳move_uploaded_file 出錯
上傳文件不存在。很可能是PHP臨時文件夾不存在導致的。
<?php
/*
* 文件上傳類
*/
class Uploads{
//上傳文件
private $uploadFile;
//上傳文件擴展名
private $ext = array('jpeg','jpg','gif','png');
//上傳文件大小
private $size = 5000000;
//上傳文件目錄
private $uploadDir = './uploads/';
//是否自定義名稱,默認FALSE
private $newName = '';
//上傳文件是否可讀,默認為TRUE
private $isRead = TRUE;
//上傳文件是否可寫,默認為TRUE
private $isWrite = TRUE;
//上傳信息
private $info;
/*
* 文件上傳類初始化
*/
public function __construct($newName='',$ext='',$size='',$dir='',$isRead=TRUE,$isWrite=TRUE){
$this->ext = empty($ext)?$this->ext:$ext;
$this->size = empty($size)?$this->size:$size;
$this->dir = empty($dir)?$this->uploadDir:$dir;
$this->newName = $newName;
$this->isRead = $isRead?TRUE:FALSE;
$this->isWrite = $isWrite?TRUE:FALSE;
}
/*
* 處理上傳文件
*/
public function doUpload(){
$this->checkData();
$this->checkFile() or $this->error();
$this->checkExt() or $this->error();
$this->checkSize() or $this->error();
$this->checkError() or $this->error();
$this->checkDir() or $this->error();
$this->upload() or $this->error();
return $this->info['msg'];
}
/*
* 處理上傳文件數據
*/
public function checkData(){
$num = 0;
$newArr = array();
foreach($_FILES as $v){
if(is_array($v['name'])){
$count = count($v['name']);
for($i=0; $i<$count; $i++){
foreach($v as $m=>$n){
$newArr[$num][$m] = $n[$i];
}
$num++;
}
}else{
$newArr[$num] = $v;
$num++;
}
}
$endArr = array();
foreach($newArr as $v){
if($v['name'] != ''){
$endArr[]=$v;
}
}
$this->uploadFile = $endArr;
}
/*
* 檢測上傳文件是否存在
*/
private function checkFile(){
if(empty($this->uploadFile)){
$this->info['error'] = '上傳文件不得為空!!!';
return FALSE;
}
return TRUE;
}
/*
* 檢測上傳文件類型是否合法
*/
private function checkExt(){
if(!is_array($this->ext)){
$this->ext = explode(',', $this->ext);
}
foreach($this->uploadFile as $v){
$ext = strtolower(substr(strrchr(basename($v['name']),'.'),1));
if(!in_array($ext,$this->ext)){
$this->info['error'] = '上傳文件類型非法,禁止上傳!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 檢測上傳文件大小
*/
private function checkSize(){
foreach($this->uploadFile as $v){
if($v['size']>$this->size){
$this->info['error'] = '上傳文件體積過大,上傳失敗!!!';
return FALSE;
}
}
return TRUE;
}
/*
* 檢測文件上傳錯誤代碼
*/
private function checkError(){
foreach($this->uploadFile as $v){
switch($v['error']){
case 0:
return TRUE;
break;
case 1:
$this->info['error'] = '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值,上傳失敗!!!';
return FALSE;
break;
case 2:
$this->info['error'] = '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值,上傳失敗!!!';
return FALSE;
break;
case 3:
$this->info['error'] = '文件只有部分被上傳!!!';
return FALSE;
break;
case 4:
$this->info['error'] = '沒有文件上傳!!!';
return FALSE;
break;
}
}
return TRUE;
}
/*
* 檢測上傳文件夾是否存在
*/
private function checkDir(){
if(!file_exists($this->uploadDir)){
mkdir($this->uploadDir,0777,true);
}
if(!is_writeable($this->uploadDir)){
$this->info['error'] = '上傳目錄沒有寫入許可權,上傳失敗!!!';
return FALSE;
}
return TRUE;
}
/*
* 上傳文件
*/
private function upload(){
date_default_timezone_set('PRC');
//檢測文件是否自定義名稱
$name = empty($this->newName)?date('Ymd_His'):$this->newName;
foreach($this->uploadFile as $k=>$v){
$upload_path = $this->uploadDir.$name.'_'.($k+1).strrchr(basename($v['name']),'.');
$upload_path = iconv('UTF-8','gbk',$upload_path);
if(is_uploaded_file($v['tmp_name'])){
if(move_uploaded_file($v['tmp_name'], $upload_path)){
if($this->isRead && $this->isWrite){
chmod($upload_path,0777);
}else if($this->isRead && !$this->isWrite){
chmod($upload_path,0444);
}else if(!$this->isRead && $this->isWrite){
chmod($upload_path,0222);
}else{
chmod($upload_path,0000);
}
$this->info['msg']=array('type'=>1,'success'=>'文件上傳成功','path'=>iconv('gbk','UTF-8',$upload_path));
}else{
$this->info['error'] = '文件上傳失敗!!!';
return FALSE;
}
}
}
return TRUE;
}
/*
* 上傳成功的方法
*/
public function success(){
echo $this->info['msg']['success'];
}
/*
* 上傳文件錯誤方法
*/
public function error(){
echo $this->info['error'];
die;
}
這是我寫的PHP類,你可以參考一下。有什麼特殊需要的,你可以告訴我一下,完善一下上傳類。
『叄』 php文件上傳失敗的問題
在用PHP進行文件上傳的操作中,需要知道怎麼控制上傳文件大小的設置,而文件可傳大小是受到多種因素制約的,現總結如下:
1、php.ini:upload_max_filesize 所上傳的文件的最大大小。默認值2M。
2、php.ini:memory_limit 本指令設定了一個腳本所能夠申請到的最大內存位元組數,默認值8M。如果不需要任何內存上的限制,必須將其設為 -1。如果內存不夠,則可能出現錯誤:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
3、php.ini:post_max_size 設定POST數據所允許的最大大小。此設定也影響到文件上傳。要上傳大文件,該值必須大於 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB進行二進制文件存儲,則需要設置my.ini:max_allowed_packet=xxM
7、httpd.conf
在 Apache 裡面有一個選項是 LimitRequestBody,這個選項可以限制用戶送出的 HTTP 請求內容。這個選項可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 內使用,分別可以用在 virtualhost 或目錄屬性設定。而 LimitRequestBody 的設定值是介乎 0 (無限制) 至 2147483647 (2GB)。
例如要在目錄 D:/AppServ/www 設定上傳限制為 100K,可以在 .htaccess 或 httpd.conf 加入以下語句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all
如果透過 .htaccess 設定,儲存檔案後會立即生效;如透過 httpd.conf 設定,須要重新啟動 Apache。
PHP關於文件上傳部分,特別提到表單隱藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文檔中給出的例子如下:
<form enctype=」multipart/form-data」 action=」_URL_」 method=」POST」>
<input type=」hidden」 name=」MAX_FILE_SIZE」 value=」30000″>
Send this file: <input name=」userfile」 type=」file」>
<input type=」submit」 value=」Send File」>
form>
Send this file:
這里設置MAX_FILE_SIZE = 30000,期待一種可能,使得瀏覽器在傳送文件之前能夠依此作出預先判斷,如果文件尺寸大於30000位元組,則不執行實際的POST動作。也就是不往伺服器發送文件內容,而是直接在客戶端提醒用戶「你試圖上傳的文件超過30000位元組」。
這的確是一個非常棒的主張,但在現實中卻暫時無法實現。不是因為這個限制可以「被簡單地繞過」,而是IE和FireFox這兩個主流瀏覽器都不支持這個特性。PHP的這個建議尚未被採納。
MAX_FILE_SIZE還有一個用場:後台PHP會判斷接收到的文件大小是否大於這個值,如果超出,$_FILES[『thisfile』][『error』]會被設置為UPLOAD_ERR_FORM_SIZE(2),同時放棄保存臨時文件,將$_FILES[『thisfile』][『size』]置0。
這個例子,沒問題,表現正常,當我試圖上傳一個40多K的文件時,PHP程序報告「文件超過MAX_FILE_SIZE」。
但是,如果我們將表單中的MAX_FILE_SIZE從30000減少到1000,情形又如何呢?
上傳800位元組的文件,正常;
上傳40K的文件,PHP報告文件過大,也正常;
上傳3000個位元組的文件,PHP未報告錯誤,它成功保存了文件!出乎意料!
問題就出在main/rfc1867.c中判斷文件是否超長的這部分代碼上。php每次從buffer中讀取FILLUNIT位元組長度的內容後,首先判斷「已經讀到的內容長度(total_bytes)」是否大於MAX_FILE_SIZE,然後再增加「已經讀到的內容長度(total_bytes)」。這樣一來,和預計的結果之間至多會有FILLUNIT位元組的誤差,而FILLUNIT=1024*5=5K。(點擊bug了解詳細內容)
這就是說,當MAX_FILE_SIZE<5K時,上傳一個大於MAX_FILE_SIZE,但是小於5K的文件是沒有問題的。
當然,因為這個設置很容易被繞過,所以伺服器端編程不應當依賴於MAX_FILE_SIZE。而且,5K到底是個很小的數值,對大多數上傳文件的表單來說沒有影響。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的設置,和客戶端上傳給伺服器端的流量大小無關。
Apache伺服器從客戶端接收長度不超過LimitRequestBody位元組數的請求,然後傳送給php模塊,php模塊再決定是否保存成臨時文件,設置$_FILES全局變數,移交給script進一步處理。
這個Apache的LimitRequestBody選項預設值=0,允許Request body的最大位元組數是2G(Linux + Apache)
最後還要注意的是:
html本身能夠post數據也是有限制的,不能超過2G。
FTP客戶端有文件偏移指針的2GB邊界限制,未使用特殊編譯flag編譯的ftp伺服器端或者客戶端,無論在什麼FS中都不支持大於2GB的文件。不知道PHP會不會也有這種情況。
『肆』 php上傳問題 在上傳不成功的情況下,當上傳文件大於10M(大概數)時就會報錯,而不是根據程序提示,
你說的10M應該是php.ini里設置的上傳文件大小限制,而你這個switch判斷是基於表單上傳文件大小來判斷的,兩者毫無相關!
一、超過10M,在php底層處理請求時就直接報錯了,根本執行不到你switch的地方,所以報錯是非預期的
二、超過2M,php能正常執行,所以會按照你switch來報錯
這里,你要搞清楚php的上傳文件大小限制跟form表單上傳文件大小限制的關系
『伍』 PHP上傳文件失敗
提示顯示的很清楚的。文件已經上傳了行洞,但是在把文件薯吵從臨時文檔手枯件夾移出來出錯了。注意新地址是否正確
可以使用絕對路徑或者相對路徑,看個人http://www.hi-docs.com/php/move_uploaded_file.html
『陸』 瑙e喅nginx+php-fpm鏃犳硶涓婁紶鏂囦歡闂棰
瑙e喅鍔炴硶
location ~ .php$ {
root /var/www/html/public;
client_max_body_size 50M;
client_body_temp_path /tmp;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
闄勶細涓嶈佹壘浜嗭紝緗戜笂璇寸殑寰堝氭垜閮借瘯榪!涓鐩存彁紺篎irebug 杈懼埌浜 Post 璇鋒眰澶у皬闄愬埗
淇鏀筆HP.ini涓璸ost_max_size upload_max_filesize max_execution_time max_input_time
鎵撳紑php.ini鏂囦歡錛屼慨鏀瑰畬姣曞悗閲嶅惎鏈嶅姟鍣ㄣ傛祴璇曚笅涓婁紶鏂囦歡銆傘傘傘(鍢誨樆錛屾槸涓嶆槸浼犱笂浜嗗緢澶х殑鏂囦歡?)
1銆佹枃浠朵笂浼犳椂瀛樻斁鏂囦歡鐨勪復鏃剁洰褰曘傚繀欏繪槸 PHP 榪涚▼鎵鏈夎呯敤鎴峰彲鍐欑殑鐩褰曘傚傛灉鏈鎸囧畾鍒 PHP 浣跨敤緋葷粺榛樿ゅ紁hp.ini鏂囦歡涓璾pload_tmp_dir鐢ㄦ潵璇存槑PHP涓婁紶鐨勬枃浠舵斁緗鐨勪復鏃剁洰褰曘
瑕佹兂涓婁紶鏂囦歡錛屽緱淇濊瘉鏈嶅姟鍣ㄦ病鏈夊叧闂涓存椂鏂囦歡鍜屾湁瀵規枃浠跺す鐨勫啓鏉冮檺
2銆乵ax_execution_time
鍙橀噺max_execution_time璁劇疆浜嗗湪寮哄埗緇堟㈣剼鏈鍓峆HP絳夊緟鑴氭湰鎵ц屽畬姣曠殑鏃墮棿錛屾ゆ椂闂翠互縐掕$畻銆傚綋鑴氭湰榪涘叆浜嗕竴涓鏃犻檺寰鐜鐘舵 鏃舵ゅ彉閲忛潪甯告湁鐢ㄣ傜劧鑰岋紝褰撳瓨鍦ㄤ竴涓闇瑕佸緢闀挎椂闂村畬鎴愮殑鍚堟硶媧誨姩鏃(渚嬪備笂浼犲ぇ鍨嬫枃浠)錛岃繖欏瑰姛鑳戒篃浼氬艱嚧鎿嶄綔澶辮觸銆傚湪榪欐牱鐨勬儏鍐典笅蹇呴』鑰冭檻灝嗘ゅ彉閲忓煎 鍔狅紝浠ラ伩鍏峆HP鍦ㄨ剼鏈姝e湪鎵ц屾煇浜涢噸瑕佽繃紼嬬殑鏃跺欏皢鑴氭湰鍏抽棴銆
淇鏀逛負錛歮ax_execution_time =800
3銆乫ile_uploads = On(鍘熸潵闂寮灝變笉鐢ㄨ劇疆浜)
4銆乽pload_max_filesize =2M淇鏀逛負800M
5銆佸悓琛ㄥ崟鎻愪氦鐩稿叧鐨勪竴涓鍙橀噺鏄痯ost_max_size錛屽畠灝嗘帶鍒跺湪閲囩敤POST鏂規硶榪涜屼竴嬈¤〃鍗曟彁浜や腑PHP鎵鑳藉熸帴鏀剁殑鏈澶ф暟鎹閲忋備技涔庝笉澶 鍙鑳介渶瑕佸皢榛樿ょ殑8 MB鏀瑰緱鏇村ぇ銆傜浉鍙嶏紝搴斿綋閫傚綋灝嗗叾闄嶅埌鏇翠負瀹為檯鐨勬暟鍊箋備絾濡傛灉甯屾湜浣跨敤PHP鏂囦歡涓婁紶鍔熻兘錛屽垯闇瑕佸皢姝ゅ兼敼涓烘瘮upload_max_filesize榪 瑕佸ぇ銆
涔熶慨鏀逛負錛歱ost_max_size =900M
6銆乵ax_input_time
姝ゅ彉閲忓彲浠ヤ互縐掍負鍗曚綅瀵歸氳繃POST銆丟ET浠ュ強PUT鏂瑰紡鎺ユ敹鏁版嵁鏃墮棿榪涜岄檺鍒躲傚傛灉搴旂敤紼嬪簭鎵榪愯岀幆澧冨勫湪浣庨熼摼璺涓婏紝鍒欓渶瑕佸炲姞姝ゅ間互閫傚簲鎺ユ敹鏁版嵁鎵闇鐨勬洿澶氭椂闂.
淇鏀逛負錛歮ax_input_time =900
7銆乵emory_limit =10M
涓轟簡閬垮厤姝e湪榪愯岀殑鑴氭湰澶ч噺浣跨敤緋葷粺鍙鐢ㄥ唴瀛橈紝PHP鍏佽稿畾涔夊唴瀛樹嬌鐢ㄩ檺棰濄傞氳繃memory_limit鍙橀噺鏉ユ寚瀹氬崟涓鑴氭湰紼嬪簭鍙浠ヤ嬌鐢ㄧ殑鏈澶у唴瀛樺歸噺
鍙橀噺memory_limit鐨勫(涓嶈佽秴鍑烘湇鍔″櫒鍐呭告渶澶у)
淇鏀逛負錛歮emory_limit =128M
『柒』 php無法上傳文件
我也遇到過,我是APACHE+PHP的環境。
造成這個情況的原因可能比較多,我也只說的出來幾個,你試一下
1.PHP程序的問題,如果可能的話,看一下源代碼的上傳模塊。
2.上傳文件的文件名必須是中文,或者必須是英文or數字.
3.如果有後台的話,則有可能是後台的功能配置,特別注意一下上傳文件的大小與格式。
如果還是不能上傳,我就懷疑是上傳模塊的問題了,你可以給你的Php站加一個上傳模塊,或者從後台上傳。
而且有的模塊是只能從後台上傳,也就是只有管理員可以上傳。
『捌』 php 圖片上傳有個小BUG,求大神解答。以下是我的一些代碼
您好,這個是 PHP 的一個 BUG(畢竟是外國人做的,中文支持不太好)。
PHP 中,上傳中文文件基本上都會出錯,所以只要在移動文件時,將文件重命名就可以了。
(如果需要原文件名,只需要將原文件名和重命名後的文件名保存在資料庫中就可以了)
代碼如下(您的代碼有一些漏洞與不規范之處,這里已更正):
//檢測文件MIME類型,如果不是圖片則阻止本次上傳
//不要相信$_FILES['file']['type'],這是可以偽造的
//如果PHP>=5.3.0,則使用finfo函數來獲取文件類型
//因為PHP>=5.3.0放棄了mime_content_type()函數
if(version_compare(PHP_VERSION,'5.3.0','>=')){
$f=finfo(FILEINFO_MIME_TYPE);
$ftype=explode('/',finfo_file($f,$_FILES['file']['tmp_name']));
finfo_close($f);
$f=NULL;
if($ftype[0]!=='image'){
@unlink($_FILES['file']['tmp_file']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
$ftype=NULL;
}
else{
$ftype=explode('/',mime_content_type($_FILES['file']));
if($ftype[0]!=='image'){
@unlink($_FILES['file']['tmp_file']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
$ftype=NULL;
}
$link=mysql_connect('localhost','root','123456');
mysql_query('setnames'UTF8'');
mysql_select_db('zhenyu',$link);
//為了防止SQL注入,對數據進行轉義
$pkind=addslashes($_POST['pkind']);
$pname=addslashes($_POST['pname']);
$pshow=addslashes($_POST['pshow']);
$filename_upload=$_FILES['file']['name'];
//Base64編碼後的字元只含有a-zA-Z0-9以及+,/,=
$filename=base64_encode($filename_upload);
//Base64編碼中有一些非文件名可用的字元,把它們替換掉
$filename=strtr($filename,array(
'+'=>'.',
'/'=>'_',
'='=>'-'
)
);
//上傳後的文件保存在proct文件夾
$file_move='proct/'.$filename;
//如果文件已存在,則在文件名後加上-和一個隨機數
//當然,這一部分也可以您自己更改,不會影響結果
if(file_exists($file_move)){
$rand='-'.strval(rand(0,9999));
$file_move.=$rand;
$filename_upload.=$rand;
//因為$rand被其它變數引用,不能直接注銷
//所以將其賦值為NULL,也可達到同樣的釋放內存的效果
$rand=NULL;
}
//判斷文件是否是通過HTTPPOST上傳的
//這可以用來確保惡意用戶無法欺騙程序去訪問本不該訪問的文件,例如/etc/passwd
if(!is_uploaded($_FILES['file']['tmp_name'])){
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
//如果文件移動失敗,則顯示錯誤信息
//這樣就不會導致資料庫存儲正常,但文件上傳失敗的情況了
elseif(!move_uploaded_file($_FILES['file']['tmp_name'],$file_move)){
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
//這里將重命名後的文件名與原文件名儲存在同一個欄位中,用豎線(|)隔開
//讀取時只需要用explode()分開就可以了
if($mysql=mysql_query("INSERTINTOproct(pkind,pname,ppicture,pshow)VALUES('{$pkind}','{$pname}','{$file_move}|{$_FILES['file']['name']}','{$pshow}')")){
//顯示文件上傳信息
echo'Upload:',$filename_upload,'<br/>';
echo'Size:',strval($_FILES['file']['size']/1024.0),'KB<br/>';
echo'Storedin:',$file_move,'<br/>';
echo'<ahref="pfabu.html">返回</a>';
echo'<script>alert("success");</script>';
}
//如果存入資料庫時失敗
//則顯示錯誤信息
else{
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
這樣就可以了。
由於沒有測試,代碼難免會出現一些錯誤,請隨意指出,謝謝!
另外,您還應該考慮到不同用戶上傳同一個文件名的文件的情況,最好是為每個用戶單獨分配一個文件夾。
而且,當一個文件夾下的文件過多(>300)時,會導致讀寫速度變慢,這一點要注意。
解決:
當一個用戶的文件夾下文件有300個時,用戶再上傳文件,就將新的文件保存在另一個文件夾中(如:用戶名加上這個用戶已有的文件夾數量)。
如果還有後續問題,可以聯系我的郵箱:
[email protected]
謝謝!