国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

PHP對(duì)文件上傳的處理方法

2024-09-04 11:45:10
字體:
供稿:網(wǎng)友

在php中文件上傳我們由html客戶端與服務(wù)器端php處理組成,中間會(huì)有一些由files全局變量對(duì)數(shù)據(jù)判斷與移動(dòng)操作,下面一起來看看.

$_FILES參數(shù)詳解:

$_FILES["file"]["name"] – 被上傳文件的名稱

$_FILES["file"]["type"] – 被上傳文件的類型

$_FILES["file"]["size"] – 被上傳文件的大小,以字節(jié)計(jì)

$_FILES["file"]["tmp_name"] – 存儲(chǔ)在服務(wù)器的文件的臨時(shí)副本的名稱

$_FILES["file"]["error"] – 由文件上傳導(dǎo)致的錯(cuò)誤代碼

$_FILES["file"]["error"]中的["error"]值情況:

html客戶端

1.客戶端上傳設(shè)置

文件上傳的最基本方法,是使用HTML表單選擇本地文件進(jìn)行提交,在form表單中可以通過<input type=”file”>標(biāo)記選擇本地文件,如果支持文件上傳操作,必須在<form>標(biāo)簽中將enctype和method兩個(gè)屬性指明相應(yīng)的值,如下所示:

★enctype=”multipart/form-data”用來指定表單編碼數(shù)據(jù)方式,讓服務(wù)器知道,我們要傳遞一個(gè)文件,并帶有常規(guī)的表單信息。

★method=”POST”用來指明發(fā)送數(shù)據(jù)的方法.

另外,還需要在form表單中設(shè)置一個(gè)hidden類型的input框,其中name的值為MAX_FILL_SIZE的隱藏值域,并通過設(shè)置其VALUE的值限制上傳文件的大小(單位字節(jié)),但這個(gè)值不能超過PHP的配置文件中upload_max_filesize值設(shè)置的大小,文件上傳表單代碼如下所示:

  1. <html> 
  2. <head><title>文件上傳</title></head> 
  3. <body> 
  4. <form action='upload.php' method="post" enctype="multipart/form-data"
  5. <input type="hidden" name="MAX_FILE_SIZE" value="1000000"
  6. 選擇文件<input type="file" name="上傳文件"
  7. </form> 
  8. </body> 
  9. </html> 

upload.php服務(wù)器端,代碼如下:

  1. <?php  
  2. $allowtype = array('gif','png','jpg'); 
  3. $size = 1000000; 
  4. $path = "./uploads"//設(shè)置上傳后保存文件的路徑 
  5.  
  6. //判斷文件是否可以成功上傳到服務(wù)器,$_FILES['myfile']['error']為0則表示上傳成功 
  7. if ($_FILES['myfile']['error']>0){ 
  8. echo '上傳錯(cuò)誤:'
  9. switch($_FILES['myfile']['error']){ 
  10. case 1: die('上傳文件大小超出了PHP配置文件中的約定值:upload_max_filesize');break
  11. case 2:die('上傳文件大小超出表單中的約定值:MAX_FILE_SIZE');break
  12. case 3: die('上傳文件只部分被上載');break
  13. case 4: die('沒有上傳任何文件');break
  14. default:die('未知錯(cuò)誤'); 
  15.  
  16. //判斷上傳的文件是否為允許的文件類型,通過文件名的后綴名 
  17. $hz = array_pop(explode(".",$_FILES['myfile']['name'])); 
  18. //通過判斷文件的后綴方式,來確定文件是否是允許上傳的文件類型 
  19. if(!in_array($hz$allowtype)){ 
  20. die("這個(gè)后綴是<b>($hz)</b>,不是允許的文件類型"); 
  21.  
  22. //判斷上傳的文件是否為允許大小 
  23. if($_FILES['myfile']['size']> $size){ 
  24. die("超過了允許的<b>{$size}</b>字節(jié)大小"); 
  25.  
  26. //為了系統(tǒng)安全,也為了同名文件不會(huì)被覆蓋,上傳后將文件名實(shí)用系統(tǒng)定義 
  27. $filename = data("YmdHis").rand(100, 900).".".$hz
  28. //開源軟件:Vevb.com 
  29. //判斷是否為上傳文件 
  30. if(is_uploaded_file($_FILES['myfile']['tmp_name'])){ 
  31. if(!move_uploaded_file($_FILES['myfile']['tmp_name'], $path.'/'.$filename)){ 
  32. die('問題:不能將文件移動(dòng)到指定目錄。'); 
  33. }else
  34. die("問題:上傳文件{$_FILES['myfile']['name']}不是一個(gè)合法的文件:"); 
  35. //如果文件上傳成功則輸出 
  36. echo "文件{$upfile}上傳成功,保存在目錄{$path}中,大小為{$_FILES['myfile']['size']}字節(jié)"
  37. ?> 

如果我們要多文件上傳只要簡(jiǎn)單對(duì)于html上傳表單以數(shù)據(jù)形式操作,代碼如下:

  1. <form action="" method="post" enctype="multipart/form-data"
  2. <input type="hidden" name="MAX_FILE_SIZE" value=""
  3. <input type="file" name="pic[]" /><br><br> 
  4. <input type="file" name="pic[]" /><br><br> 
  5. <input type="file" name="pic[]" /><br><br> 
  6. <input type="file" name="pic[]" /><br><br> 
  7. <input type="submit" value="upload"/> 
  8. </form> 

然后對(duì)于upload.php處理文件我們只要遍歷數(shù)組pic[]就可以了.

  1. for($i=0;$i<count($up_info['name']);$i++){ 
  2. //這樣//foreach 循環(huán)處理多個(gè)文件上傳 

①函數(shù)is_uploaded_file()

該函數(shù)判斷指定的文件是否是通過HTTP POST上傳的,如果是則返回TRUE。用于防止?jié)撛诘墓粽邔?duì)原本不能通過腳本交互的文件進(jìn)行非法管理,這可以用來確保惡意的用戶無(wú)法欺騙腳本去訪問本不能訪問的文件,例如/etc/passwd。此函數(shù)的原型如下所示:

bool is_uploaded_file(string) //判斷指定的文件是否是通過HTTP POST上傳的

為了能使此函數(shù)正常工作,唯一的參數(shù)必須指定類似于$_FILES['userfile']['tmp_name']的變量,才能判斷指定的文件確實(shí)是上傳文件。如果使用從客戶端上傳的文件名$_FILES['userfile']['name']則不能正常運(yùn)作。

PHP上傳文件大小限制解決方法:

第一:在php.ini里面查看如下行:

  1. upload_max_filesize = 8M  
  2. post_max_size = 10M  
  3. memory_limit = 20M  

把這些值改成我所說的,看看有沒有問題,另外要確認(rèn)上傳的 <form> 里沒有類似下面的這行<input type="hidden" name="MAX_FILE_SIZE" value="500000">這樣也是限制上傳大小用的.

第二:如果是apache 2 需要修改

/etc/httpd/conf.d/php.conf

中的LimitRequestBody 524288將524288(=512×1024)改大,比如5M(=5×1024×1024)這樣上傳就不會(huì)出現(xiàn)如上問題,上傳不響應(yīng),上傳現(xiàn)實(shí)該頁(yè)無(wú)法現(xiàn)實(shí)也將得到解決.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 珠海市| 榆树市| 福建省| 呼图壁县| 西畴县| 襄城县| 荥经县| 漠河县| 临西县| 哈密市| 安阳市| 南漳县| 永平县| 白山市| 天台县| 清流县| 如东县| 平湖市| 南昌市| 运城市| 治多县| 商城县| 蒙城县| 西乡县| 汨罗市| 上犹县| 华蓥市| 新昌县| 田东县| 秀山| 原平市| 漠河县| 宣武区| 玉环县| 普兰店市| 凉城县| 沅陵县| 南投市| 万载县| 丘北县| 麻栗坡县|