2023-11-19 分類: 網(wǎng)站建設(shè)
今天來(lái)學(xué)習(xí)的擴(kuò)展,其實(shí)是標(biāo)準(zhǔn)擴(kuò)展php文件上傳代碼,為什么呢?因?yàn)榭蚣茉诎惭b的時(shí)候是必要的擴(kuò)展,如果不開啟,連框架都無(wú)法使用。
簡(jiǎn)介
是通過給定的字節(jié)序列庫(kù)獲取文件的內(nèi)容類型和編碼。它獲取的序列庫(kù)是根據(jù)操作系統(tǒng)確定的。例如網(wǎng)站優(yōu)化,系統(tǒng)默認(rèn)使用文件/usr//misc/。其實(shí)我們可以通過這個(gè)擴(kuò)展函數(shù)來(lái)獲取文件的MIME信息,就像我們常見的/png和text/html內(nèi)容一樣。
此擴(kuò)展同時(shí)兼容新舊開發(fā)模式,因此提供了面向過程和面向?qū)ο髢煞N形式。下面我們來(lái)看看面向?qū)ο蟮谋韱问侨绾问褂玫摹?/p>
面向?qū)ο蟮氖褂?/p>
$finfo?=?new?finfo(FILEINFO_MIME);
echo?$finfo->file("./1.pHp中的日期相關(guān)函數(shù)(三).php"),?pHp_EOL;
//?text/x-php;?charset=us-ascii
echo?$finfo->buffer(file_get_contents("https://www.baidu.com"))?.?"\n";
//?text/html;?charset=utf-8
$finfo->set_flags(FILEINFO_EXTENSION);
echo?$finfo->file('timg.jpeg')?.?"\n";
//?jpeg/jpg/jpe/jfif
首先,我們通過一個(gè)新的類來(lái)獲取文件操作對(duì)象。參數(shù)中的常量是可選的。默認(rèn)情況下,表示沒有特殊處理。這里我們用它來(lái)表示文件的mime類型和編碼。
然后使用file()方法獲取指定文件的mime信息。 () 方法返回字符串內(nèi)容的信息。例如,如果我們獲取一個(gè)網(wǎng)頁(yè)信息的內(nèi)容,我們可以得到它的字符串表示的文件編碼格式為 text/hmtl 。 () 方法是在實(shí)例化對(duì)象后修改其構(gòu)造參數(shù)屬性,也就是我們實(shí)例化時(shí)設(shè)置的參數(shù)信息,這里我們修改為 ,即讓對(duì)象返回文件可能的擴(kuò)展名。我們使用圖片進(jìn)行了測(cè)試,返回的可能擴(kuò)展名包括評(píng)論中顯示的擴(kuò)展名。
面向過程
對(duì)于上面的面向?qū)ο蟠a,讓我們也展示一下使用面向過程的函數(shù)如何進(jìn)行相同的操作。
$finfo?=?finfo_open(FILEINFO_MIME);
echo?finfo_file($finfo,"./1.pHp中的日期相關(guān)函數(shù)(三).php"),?pHp_EOL;
//?text/x-php;?charset=us-ascii
echo?finfo_buffer($finfo,?file_get_contents("https://www.baidu.com")),?pHp_EOL;
//?text/html;?charset=utf-8
finfo_set_flags($finfo,?FILEINFO_EXTENSION);
echo?finfo_file($finfo,?'timg.jpeg')?.?"\n";
//?jpeg/jpg/jpe/jfif
finfo_close($finfo);
可以看出,這里是用()方法替換對(duì)象,獲取操作句柄。然后使用類似的 () , () , () 函數(shù)進(jìn)行操作,達(dá)到的效果和上面面向?qū)ο蟮慕Y(jié)果是一樣的。
需要注意的是,面向過程的寫法有一個(gè)()方法。一般對(duì)句柄類型的操作都有一個(gè)關(guān)閉函數(shù)來(lái)釋放句柄資源。就像一個(gè)擴(kuò)展一樣,它也包含這樣一個(gè)功能,并且只為過程提供這個(gè)功能。上面的類中沒有這樣的()方法。
快速返回 mime
當(dāng)然,擴(kuò)展也為我們提供了一個(gè)快速返回文件mime信息的功能。我們可以在不使用對(duì)象或打開句柄的情況下快速輕松地獲取文件的mime信息。
echo?mime_content_type('./1.pHp中的日期相關(guān)函數(shù)(三).php'),?pHp_EOL;
//?text/x-php
echo?mime_content_type('./timg.jpeg'),?pHp_EOL;
//?image/jpeg
不過pHp官方好像已經(jīng)棄用了這個(gè)功能,不過現(xiàn)在已經(jīng)恢復(fù)了,也就是說不特別推薦使用這個(gè)功能。在正式的開發(fā)過程中,大家不要太麻煩。使用對(duì)象或相關(guān)函數(shù)獲取mime信息更可靠。
如果我們確定要判斷的文件只是圖片類型,那么我們也可以使用另外一個(gè)函數(shù)來(lái)獲取圖片文件的mime。
總結(jié)
很簡(jiǎn)單但是很有用的功能php文件上傳代碼,為什么有用呢?上傳文件的安全問題可以通過它解決。我們?cè)谏蟼魑募r(shí),通常會(huì)在上傳數(shù)組中判斷文件的擴(kuò)展名和文件的MIME類型。但是很多工具可以在上傳過程中修改文件的MIME類型,即通過一些抓包工具修改-Type。但是通過擴(kuò)展獲取的文件必須是本地或遠(yuǎn)程存在的,也就是說不會(huì)出現(xiàn)上傳過程中修改傳輸信息導(dǎo)致的安全檢查繞過問題。
因此網(wǎng)站制作,在框架中, ///src///.php 類中的() 方法使用() 函數(shù)來(lái)獲取文件的mime 信息。在其上傳組件中,在底層框架中,對(duì)上傳文件的MIME判斷也是使用()函數(shù),(//mime/ser.php)沒有直接使用正常上傳的$type字段。
測(cè)試代碼:
學(xué)習(xí)在 pHp.php 中使用擴(kuò)展
參考文件:
新聞標(biāo)題:php文件上傳代碼標(biāo)配的一個(gè)擴(kuò)展了,為什么呢?(一)_php文件域上傳
URL標(biāo)題:http://jinyejixie.com/news25/295325.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、定制開發(fā)、微信小程序、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容