背景:
version < php-5.3 沒有API能夠查看文件的 mime_type, 故需要編譯擴展 fileinfo 來擴展PHP的API(finfo_*系列函數)。php-5.3 以后將fileinfo 拉入的官方發行包中,將不存在此問題。
知識准備:
MIME type的縮寫為(Multipurpose Internet Mail Extensions)代表互聯網媒體類型(Internet media type),MIME使用一個簡單的字符串組成,最初是為了標識郵件Email附件的類型,在html文件中可以使用content-type屬性表示,描述了文件類型的互聯網標准。
MIME類型能包含視頻、圖像、文本、音頻、應用程序等數據。
為了檢測文件的MIME類型,必須配置告知magic文件的地址(如果不指定,默認使用apache 的magic地址)
mime_magic extensionYou must compile PHP with the configure switch --with-mime-magic to get support for mime-type functions. The extension needs a copy of the simplified magic file that is distributed with the Apache httpd. 所以php 在apache mod 模式下的 $_FILE['img']['type'] 字段數據依賴於Apache 發布的相應版本的 magic file.exif extensionWith the exif extension you are able to work with image meta data. For example, you may use exif functions to read meta data of pictures taken from digital cameras by working with information stored in the headers of the JPEG and TIFF images.
軟件准備:
php: php-5.2.14
Fileinfo: Fileinfo-1.0.4.tgz
file: file-5.20.tar.gz
1、file 安裝
wget ftp://ftp.astron.com/pub/file/file-5.15.tar.gz tar zxf file-5.20.tar.gz cd file-5.20/ ./configure --prefix=/usr/local/services/file-5.20 make make install
2、Fileinfo擴展編譯安裝
wget http://pecl.php.net/get/Fileinfo-1.0.4.tgz tar zxf Fileinfo-1.0.4.tgz cd Fileinfo-1.0.4/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-fileinfo=/usr/local/services/file-5.20/ make #拷貝fileinfo.so 到php.ini 中定義的 extension_dir cp fileinfo.so /usr/local/php/extensions/ #修改php.ini echo "extension=fileinfo.so" >> /usr/local/php/lib/php.ini
3、驗證
php -m | grep fileinfo fileinfo
備注:
1、安裝軟件注意查看 ./configure --help 其中會指出庫或頭文件的依賴
2、擴展移植,查看依賴, 移植需要注意對:libmagic.so.1 的依賴
ldd /usr/local/php/extensions/fileinfo.so
linux-vdso.so.1 => (0x00007fff9b7ff000)
libmagic.so.1 => /usr/local/lib/libmagic.so.1 (0x00007f8493582000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8493342000)
libz.so.1 => /lib64/libz.so.1 (0x00007f849322d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f84937a4000)
