2023-11-19 分類: 網站建設
今天來學習的擴展,其實是標準擴展php文件上傳代碼,為什么呢?因為框架在安裝的時候是必要的擴展,如果不開啟,連框架都無法使用。
簡介
是通過給定的字節序列庫獲取文件的內容類型和編碼。它獲取的序列庫是根據操作系統確定的。例如網站優化,系統默認使用文件/usr//misc/。其實我們可以通過這個擴展函數來獲取文件的MIME信息,就像我們常見的/png和text/html內容一樣。
此擴展同時兼容新舊開發模式,因此提供了面向過程和面向對象兩種形式。下面我們來看看面向對象的表單是如何使用的。
面向對象的使用
$finfo?=?new?finfo(FILEINFO_MIME);
echo?$finfo->file("./1.pHp中的日期相關函數(三).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
首先,我們通過一個新的類來獲取文件操作對象。參數中的常量是可選的。默認情況下,表示沒有特殊處理。這里我們用它來表示文件的mime類型和編碼。
然后使用file()方法獲取指定文件的mime信息。 () 方法返回字符串內容的信息。例如,如果我們獲取一個網頁信息的內容,我們可以得到它的字符串表示的文件編碼格式為 text/hmtl 。 () 方法是在實例化對象后修改其構造參數屬性,也就是我們實例化時設置的參數信息,這里我們修改為 ,即讓對象返回文件可能的擴展名。我們使用圖片進行了測試,返回的可能擴展名包括評論中顯示的擴展名。
面向過程
對于上面的面向對象代碼,讓我們也展示一下使用面向過程的函數如何進行相同的操作。
$finfo?=?finfo_open(FILEINFO_MIME);
echo?finfo_file($finfo,"./1.pHp中的日期相關函數(三).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);
可以看出,這里是用()方法替換對象,獲取操作句柄。然后使用類似的 () , () , () 函數進行操作,達到的效果和上面面向對象的結果是一樣的。
需要注意的是,面向過程的寫法有一個()方法。一般對句柄類型的操作都有一個關閉函數來釋放句柄資源。就像一個擴展一樣,它也包含這樣一個功能,并且只為過程提供這個功能。上面的類中沒有這樣的()方法。
快速返回 mime
當然,擴展也為我們提供了一個快速返回文件mime信息的功能。我們可以在不使用對象或打開句柄的情況下快速輕松地獲取文件的mime信息。
echo?mime_content_type('./1.pHp中的日期相關函數(三).php'),?pHp_EOL;
//?text/x-php
echo?mime_content_type('./timg.jpeg'),?pHp_EOL;
//?image/jpeg
不過pHp官方好像已經棄用了這個功能,不過現在已經恢復了,也就是說不特別推薦使用這個功能。在正式的開發過程中,大家不要太麻煩。使用對象或相關函數獲取mime信息更可靠。
如果我們確定要判斷的文件只是圖片類型,那么我們也可以使用另外一個函數來獲取圖片文件的mime。
總結
很簡單但是很有用的功能php文件上傳代碼,為什么有用呢?上傳文件的安全問題可以通過它解決。我們在上傳文件時,通常會在上傳數組中判斷文件的擴展名和文件的MIME類型。但是很多工具可以在上傳過程中修改文件的MIME類型,即通過一些抓包工具修改-Type。但是通過擴展獲取的文件必須是本地或遠程存在的,也就是說不會出現上傳過程中修改傳輸信息導致的安全檢查繞過問題。
因此網站制作,在框架中, ///src///.php 類中的() 方法使用() 函數來獲取文件的mime 信息。在其上傳組件中,在底層框架中,對上傳文件的MIME判斷也是使用()函數,(//mime/ser.php)沒有直接使用正常上傳的$type字段。
測試代碼:
學習在 pHp.php 中使用擴展
參考文件:
新聞標題:php文件上傳代碼標配的一個擴展了,為什么呢?(一)_php文件域上傳
URL標題:http://m.newbst.com/news25/295325.html
成都網站建設公司_創新互聯,為您提供響應式網站、標簽優化、自適應網站、定制開發、微信小程序、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容