PHP檔案型別檢查及fileinfo模組安裝使用

pythontab發表於2018-11-08

在web系統開發中,檔案上傳功能是非常常見的功能,這個功能開發中有一個非常關鍵的步驟:檔案型別檢查,這對於系統安全性起著很重要的作用,也是一個合格的程式設計師必須要做的。那麼在PHP 中如何進行檔案型別檢查呢?

檔案型別檢查方法

在回答這個問題之前, 首先看一下你的 PHP 版本,因為不同版本可能方法不同:

在 PHP 5.3之前,可以使用mime_content_type方法檢查;

但是 PHP 5.3之後, 這個方法被廢棄了,原因是這個方法存在比較多的問題;


這裡建議大家把 PHP 5.3以下版本進行升級,因為PHP7都出來了, 你還在用PHP5.2 甚至更老的版本,這完全不符合網際網路圈快速迭代,與時俱進的風格。不開玩笑的講, PHP7確實有非常大的效能提升。

所以呢,我們只說一下 PHP 5.3 以後的檔案型別檢查方法:使用fileinfo庫


fileinfo模組的使用方法

官方文件中對於 fileinfo 模組的簡介:本模組中的函式透過在檔案的給定位置查詢特定的 魔術 位元組序列 來猜測檔案的內容型別以及編碼。 雖然不是百分百的精確, 但是通常情況下能夠很好的工作。


先上程式碼吧

$fileName = 'www.pythontab.com.png';
$fip = finfo_open(FILEINFO_MIME);  // 返回 mime 型別
echo finfo_file($fip, $fileName);
finfo_close($fip);


這樣就可以直接輸出檔案的 Mime 型別了,還是比較簡單的。


fileinfo 模組安裝

但是, PHP 預設並沒有開啟 fileinfo 模組,預設不會安裝這個庫, 所以我們要自己安裝一下才可以使用。

下面來看下如何安裝 fileinfo 模組:

1 下載擴充套件包

根據各自的版本號進行下載

wget -O php-5.6.25.tar.gz http://cn2.php.net/get/php-5.6.25.tar.gz/from/this/mirror

這裡也可以單獨下載 fileinfo 包

wget -O http://pecl.php.net/get/Fileinfo-1.0.4.tgz

2 解壓

tar -zxvf php-5.6.25.tar.gz

3 進入該擴充套件目錄

cd /soft_src/php/php-5.6.25/ext/fileinfo

4 編譯 && 安裝

/usr/local/php/bin/phpize
./configure -with-php-config=/usr/local/php/bin/php-config
make && make install

這樣,就會在系統預設的擴充套件目錄下新生成一個fileinfo.so檔案


5 修改php.ini檔案

vim /usr/local/php/etc/php.ini

加入:extension=fileinfo.so


重啟 php, 至此安裝完成


相關文章