成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

PHP文件上傳問題總結(jié)——文件大小檢測(cè)以及大文件上傳處理

瀏覽:4日期:2022-09-13 08:22:18

由于涉及到本地和服務(wù)器兩方面的安全問題,所以基于input type='file'形式的頁面文件上傳一直處于一個(gè)很尷尬的位置。一方面,用戶不希望隱私泄露,所以瀏覽器無法對(duì)用戶在上傳時(shí)選擇的文件做有效的判 斷。另一方面,為了服務(wù)器端的安全,減輕傳輸負(fù)擔(dān),系統(tǒng)又希望能在用戶開始上傳之前就將非法的文件拒之門外。

一來一去,基于原始input方式的上傳,成為網(wǎng)絡(luò)存儲(chǔ)網(wǎng)站避之唯恐不及的遺留性問題,也造就了現(xiàn)在千奇百怪的插件、上傳客戶端。

input方式的上傳就如此之差么?當(dāng)然不是。上傳文件不大的時(shí)候,它還是非常簡(jiǎn)單可靠的,在PHP中,我們只需要一個(gè)復(fù)合型表單:

<form enctype='multipart/form-data' action='__URL__' method='POST'>

一個(gè)輸入框:

<input name='userfile' type='file' />

和服務(wù)器端的一行代碼:

move_uploaded_file($_FILES[’userfile’][’tmp_name’], ’/var/www/uploads/’. basename($_FILES[’userfile’][’name’]));

就可以實(shí)現(xiàn)整個(gè)上傳過程。

但隨文件增大,表單上傳的不足就會(huì)暴露出來。尤其是我們想取得最基本的文件大小來阻止過大文件上傳這一簡(jiǎn)單的想法,也變得如此困難。以下一一道來:

通過MAX_FILE_SIZE

MAX_FILE_SIZE 隱藏字段(單位為字節(jié))必須放在文件輸入字段之前,其值為接收文件的最大尺寸。這是對(duì)瀏覽器的一個(gè)建議,PHP 也會(huì)檢查此項(xiàng)。在瀏覽器端可以簡(jiǎn)單繞過此設(shè)置,因此不要指望用此特性來阻擋大文件。實(shí)際上,PHP 設(shè)置中的上傳文件最大值是不會(huì)失效的。但是最好還是在表單中加上此項(xiàng)目,因?yàn)樗梢员苊庥脩粼诨〞r(shí)間等待上傳大文件之后才發(fā)現(xiàn)文件過大上傳失敗的麻煩。

顯然PHP的開發(fā)者們也考慮到了大文件上傳的問題,但就像手冊(cè)所說,MAX_FILE_SIZE只是對(duì)瀏覽器的一個(gè)建議,事實(shí)上目前為止所有主流的瀏覽器并沒有采納這個(gè)建議,所以采用MAX_FILE_SIZE約束文件大小形同擺設(shè),不可行。

通過服務(wù)器端

MAX_FILE_SIZE既然無效,那么用戶可以將文件上傳到服務(wù)器,服務(wù)器端通過$_FILES[’userfile’][’size’]判斷用戶上 傳的文件大小,然后決定是否接受上傳并返回信息。暫且排除服務(wù)器的負(fù)荷以及可能存在的惡意破壞行為,這種解決方案聽起來無非是浪費(fèi)一部分帶寬,也能對(duì)用戶 上傳文件作出約束。

但這也是不可行的,PHP的文件上傳受到php.ini以下這些設(shè)置的影響:

post_max_sizeupload_max_filesizemax_execution_timememory_limit

雖然設(shè)置方法在手冊(cè) 中都有比較詳細(xì)的說明,之所以仍然說此方法不可行,是因?yàn)閜hp執(zhí)行腳本在超過memory_limit時(shí),該次的POST數(shù)據(jù)會(huì)全部丟失并且不會(huì)報(bào)錯(cuò)!

試想用戶填寫了一個(gè)超長(zhǎng)的表單,并伴隨一個(gè)超過memory_limit的文件一起上傳,經(jīng)過了漫長(zhǎng)的等待時(shí)間之后發(fā)現(xiàn)等來的又是一張干干凈凈的空白表 單,那是何等印象深刻的用戶體驗(yàn)啊。更何況數(shù)十M的服務(wù)器流量?jī)H僅用來檢測(cè)文件大小,是現(xiàn)在的網(wǎng)絡(luò)環(huán)境不允許的。

通過Javascript

Javascript是基于瀏覽器的,雖然JS能完成很多看似不可能的任務(wù),但瀏覽器做不到的事情JS同樣無法做到。先天不足注定了這項(xiàng)工作僅僅靠Javascript是無法勝任的。不過一些IE Only的方法 也還是存在的,僅作參考 。

通過Flash

Flash的FileReference類提供了一套比較全面的文件處理方法,現(xiàn)在大多數(shù)大文件上傳也都采用了基于Flash的方案。如果利用Flash與Js交互,能否實(shí)現(xiàn)客戶端對(duì)文件大小的檢測(cè)呢?答案是可行的。

首先在flash文件中實(shí)例化FileReference類。

var fr = new FileReference();

基于這個(gè)類就可以用Flash提供的file browse和SelectFile事件替代瀏覽器的事件。我們需要:

1、綁定SelectFile

fr.addEventListener(Event.SELECT, onSelectFile);

2、創(chuàng)建一個(gè)供Js訪問的對(duì)象,用來放置flash得到的文件信息

var s = { size:0, name:’’, type:’’}

3、創(chuàng)建file browse方法

function browseFile():void {<br> fr.browse();<br>}

4、當(dāng)SelectFile事件觸發(fā)的時(shí)候,傳遞文件信息

function onSelectFile(e:Event):void {<br> s.size = fr.size;<br> s.name = fr.name;<br> s.type = fr.type;<br>}

5、將browseFile方法公開可供Js調(diào)用

ExternalInterface.addCallback('browseFile', browseFile);

6、將得到的文件信息傳遞給Js

ExternalInterface.call('onSelectFile',s);

現(xiàn)在我們已經(jīng)可以通過Js獲得由flash傳遞來的文件大小信息了,具體的實(shí)現(xiàn)可以參看Demo 。

結(jié)論

問題至此似乎已經(jīng)得到解決了,我們已經(jīng)成功的校驗(yàn)了文件大小不是么。但本文的最終結(jié)論是,基于Flash的文件大小校驗(yàn),仍然不可行。

文件大小校驗(yàn)的唯一目的,是為了上傳。在上面的Demo中可以看到校驗(yàn)成功的文件名會(huì)顯示在一個(gè)輸入框里。熟悉上傳的同學(xué)不覺得少了什么嗎?沒錯(cuò),通過 flash只能得到文件名,而無法得到文件的完整路徑,而文件路徑卻是input方式上傳的必要條件。所以雖然可以成功的通過Flash與Js交互校驗(yàn)文 件大小,但我們能做到的也僅僅只是校驗(yàn)而已,之后想要上傳,唯有繼續(xù)通過flash方式進(jìn)行。

Flash開發(fā)出于安全考慮屏蔽了文件的完整路徑這無可厚非,不過文件上傳,尤其是PHP環(huán)境下的文件校驗(yàn)上傳方案仍然沒有得到最好的解決。

當(dāng)然彌補(bǔ)的方法有很多:

基于Perl的項(xiàng)目 FileChucker , XUpload , Uber-Uploader基于Flash的項(xiàng)目 SWFUpload還有筒子用PHP直接在服務(wù)器華麗的建立socket鏈接 。

但終究我希望有一天能看到僅基于HTML就能實(shí)現(xiàn)的嚴(yán)整健壯的上傳方案,但愿這一天不會(huì)太遠(yuǎn)。

最后是本次的代碼下載 。

php文件上傳大小設(shè)置詳解

用php上傳文件,問題最多的就是上傳大體積文件時(shí)出現(xiàn)錯(cuò)誤。 這就涉及到php的配置文件——php.ini

在此配置文件中,有這么幾個(gè)值是跟文件上傳有密切關(guān)系的:

file_uploads = on //是否允許系統(tǒng)支持文件上傳upload_tmp_dir //臨時(shí)文件的存儲(chǔ)路徑,linux下為系統(tǒng)默認(rèn)路徑,win32下需要指定upload_max_filesize = 2m //允許文件上傳最大體積post_max_size = 2m //通過post方法給php時(shí),php所能接受的最大數(shù)據(jù)容量

如果你上傳的文件體積在8m一下(通常情況),那修改以上設(shè)置就可以滿足你的要求了。

但要>8m,那除了上面幾個(gè)值,還要特別關(guān)注另外兩個(gè)值了:

max_execution_time = 30 //每個(gè)script所執(zhí)行的最大時(shí)間(php上傳就時(shí),體積大了,就是個(gè)時(shí)間問題)memory_limit = 8m //每個(gè)script所能消耗的最大memory

試著把這兩個(gè)值改大些。一般就可以解決大多數(shù)問題了。

就此推斷,上傳文件的體積是可以無窮大的。但還要考慮你的網(wǎng)絡(luò)情況,等等。

在php.net上,有人說按照這個(gè)方法改了后,大于100m的文件還是會(huì)出錯(cuò)。 不知道是不是PHP本身的問題了。

標(biāo)簽: PHP
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美在线观看| 婷婷国产在线综合| 亚洲mv大片欧洲mv大片精品| 欧美私人啪啪vps| 欧美一级xxx| 久久99九九99精品| 国产亚洲精品v| 亚洲三级电影网站| 狠狠色综合一区二区| 欧美无砖砖区免费| 五月天激情综合| 亚洲一二三区在线| 欧美精品一区二区三| 亚洲综合丁香| 亚洲黄色免费电影| 精品久久久影院| 激情久久五月天| 欧美三日本三级三级在线播放| 视频在线在亚洲| 久久性天堂网| 视频一区在线视频| 色哟哟一区二区在线观看| 婷婷综合另类小说色区| 国产亚洲一区二区三区在线播放| 久久99在线观看| 亚洲蜜臀av乱码久久精品| 国产一区二区不卡| 欧美午夜理伦三级在线观看| 国内外成人在线| 91麻豆精品国产91久久久资源速度| 美国精品在线观看| 欧美伊人久久大香线蕉综合69 | 三级成人在线视频| 国产亚洲美州欧州综合国| 亚洲国产精品一区在线观看不卡| 一区二区三区在线播放| 日韩av在线发布| 亚洲一区精彩视频| 麻豆精品久久精品色综合| 久久香蕉精品| 欧美性xxxxxxxx| 日韩视频在线观看国产| 94-欧美-setu| 99久久精品国产一区| 国产麻豆精品在线观看| 国产专区欧美精品| 亚洲一区在线看| 国产精品久久久久久久午夜片| 亚洲日本中文字幕区| 中文字幕在线观看一区| 欧美日韩在线观看一区二区 | av在线不卡网| 久久婷婷色综合| 亚洲视频一区| 亚洲在线视频一区| 欧美丝袜自拍制服另类| 国产成人三级在线观看| 国产欧美视频一区二区| 99视频+国产日韩欧美| 日本欧美一区二区三区乱码| 91精品国产综合久久小美女| 欧美在线视频一区二区三区| 亚洲精品美国一| 欧美亚洲动漫制服丝袜| av电影在线观看一区| 亚洲婷婷在线视频| 久久综合网络一区二区| 国产综合久久久久久久久久久久 | 在线高清一区| 亚洲国产一区二区三区| 欧美在线你懂的| 国产91精品欧美| 日韩一区欧美一区| 一本一本大道香蕉久在线精品 | 国产欧美精品久久| 蜜臀av一区二区| 久久日一线二线三线suv| 在线观看的日韩av| 亚洲一区二区精品视频| 欧美伦理视频网站| 91捆绑美女网站| 性做久久久久久久免费看| 欧美电视剧免费观看| 国产精品久久久一区二区三区| 国产精品1024久久| 亚洲女人****多毛耸耸8| 老司机午夜精品视频| 成人一区在线看| 亚洲女同女同女同女同女同69| 一本色道综合亚洲| 91免费观看在线| 日韩精品欧美精品| 久久午夜老司机| 毛片一区二区| 成人小视频在线观看| 亚洲国产中文字幕| 久久亚洲精华国产精华液| 色域天天综合网| 欧美黄色aaaa| 亚洲一二三区在线观看| 欧美一区二区在线观看| 中文欧美日韩| 成人性生交大片免费| 日韩美女视频一区二区 | 一区在线中文字幕| 91福利资源站| 激情综合电影网| 国内成人免费视频| 亚洲摸摸操操av| 久久综合给合久久狠狠狠97色69| 久久综合狠狠| 欧美人与禽猛交乱配| 视频在线观看91| 中文字幕在线不卡一区二区三区| 欧美色图一区二区三区| 狠色狠色综合久久| 国产福利91精品一区二区三区| 亚洲一区二区在线观看视频| 久久综合色之久久综合| 91福利在线免费观看| 欧美特黄a级高清免费大片a级| 国产麻豆精品95视频| 亚洲国产日韩av| 国产日韩欧美综合在线| 4hu四虎永久在线影院成人| 午夜综合激情| 欧美女激情福利| 国产精品自在欧美一区| 亚洲va欧美va人人爽午夜| 国产色爱av资源综合区| 欧美最猛性xxxxx直播| 亚洲国产高清一区二区三区| 成人高清免费在线播放| 日本中文一区二区三区| 亚洲人成网站在线| 亚洲精品一区二区三区99| 91国产成人在线| 国产伦精品一区二区三区照片91 | 欧美日韩精品福利| 国产精品久久久久久久久婷婷 | 亚洲成人原创| 91在线无精精品入口| 国产一区二区不卡在线| 麻豆国产精品视频| 视频在线观看一区二区三区| 一级中文字幕一区二区| 综合久久国产九一剧情麻豆| 欧美一区二区福利视频| 91成人免费在线视频| 免费视频一区| aa亚洲婷婷| 国产综合自拍| 91一区一区三区| 高清国产一区二区三区| 久久精品国产精品青草| 首页国产欧美久久| 亚洲高清一区二区三区| 一区二区成人在线| 一区av在线播放| 樱桃国产成人精品视频| 亚洲欧美另类综合偷拍| 亚洲视频1区2区| 欧美激情一区二区三区| 精品播放一区二区| 日韩精品一区二区三区视频| 欧美日韩三级在线| 欧美老人xxxx18| 欧美日韩另类一区| 欧美日韩精品是欧美日韩精品| 一本色道综合亚洲| 色哟哟国产精品| 色成人在线视频| 久久综合九色| 久久亚洲不卡| 色88888久久久久久影院按摩| 久久青草久久| 色婷婷av一区二区三区大白胸 | 欧美亚洲自偷自偷| 久久免费99精品久久久久久| 老妇喷水一区二区三区| 色婷婷久久久综合中文字幕| 色婷婷综合久久久久中文一区二区 | 一区二区在线电影| 亚洲视频你懂的| 亚洲欧美另类综合偷拍| 亚洲婷婷综合色高清在线| 亚洲天堂精品视频| 一区二区三区四区不卡在线| 亚洲免费观看高清完整版在线观看熊 | 国产精品观看| 欧美精品亚洲精品| 欧美日韩 国产精品| 国产精品二区在线| 亚洲激情婷婷| 中文精品视频一区二区在线观看| aa日韩免费精品视频一| 亚洲欧美激情诱惑| 六月丁香综合| 欧美日韩免费观看一区二区三区| 91精品国产综合久久久久久久 |