- 论坛徽章:
- 0
|
来CU这里长时间了,很少在里面发表文章,主要是我还是菜鸟,没有什么可发表的;再则,是自己的太懒了。所以就写一个自己的BLOG,写一写自己碰到的问题,希望别人可以看到少走弯路。
最近在学习PHP,所以写一下碰到的问题吧。关于PHP对上传文件类型的检测,相信很多人都做了。做的简单的直接就是不符合扩展名的不能上传。这个也说不上好与不好,只是看你的需求,如果是让用户上传图片然后再显示,别人上传EXE文件改成JPG的,你的网页在显示的时候就是出现大X,影响效果。
有人使用的是$_FILE['uploadfile']['type']来检测,原来是根据浏览器发过来的文件类型做的检测,不准确,和上面的一样,如果用户把EXE的扩展名改成JPG的,浏览器也会认为是IMAGE/JPEG格式的,所以
$_FILES['uploadfile']['type']也变成IMAGE/JPEG的。绕过了你的检测。
再有就是使用PECL里的fileinfo来检测了。
fileinfo的安装,我使用的是GENTOO,直接emerge -av pecl-fileinfo,GENTOO真是强大,把pecl的扩展都放到了portage里。你也可以直接去pecl.php.net下载源码编译。方法也很简单。
#tar zxvf fileinfo-XXX.tar.gz
#cd fileinfo-XXX
#phpize
#./configure
#make
#cp modules/fileinfo.so /usr/local/php/modules (你PHP的modules的目录。在PHP.INI里设置的。)
#修改PHP.INI增加extension=fileinfo.so
使用的的时候一直找不到magic.mime,还有MAIGC,很不解,我的系统里根本没有这两个文件。看官方的文档也没有清楚的说明。有的说是/etc/magic,有的说是/usr/share/file/magic。我的系统里只有/usr/share/misc/file/magic.mgc。有一个在WINDOWS下的使用的朋友是用的sourceforge上的file-bin.zip里的magic 和magic.mime。我下载下来用,发现可以用,不过所有的文件都认成application/otect-stream,肯定不对。又找到了官网上看到这样的话。
magic_file
Name of a magic database file, usually something like
/path/to/magic.mime. If not specified,
the MAGIC environment variable is used. If this variable
is not set either, /usr/share/misc/magic is used by default.
A .mime and/or .mgc suffix is added if
needed
看到了有一个.mgc扩展名。呵呵。对了就是/usr/share/misc/file/magic.mgc。使用之后没有问题。
在使用过程中还碰到了一个问题。fileinfo可以使用面向对像和面向过程的写法。
= new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc");
if (!$finfo) {
echo "Opening fileinfo database failed";
exit();
}
$filename = "/usr/local/something.txt";
echo $finfo->file($filename);
$finfo->close();
?>
在面向对象的最后$finfo->close()的时候总是出现错误。不解,也许是我写错了,不知道你们碰到过没有。
使用下面的面向过程的就可以使用close()
= finfo_open(FILEINFO_MIME, "/usr/share/misc/file/magic.mgc");
if (!$finfo) {
echo "Opening fileinfo database failed";
exit();
}
$filename = "/usr/local/something.txt";
echo finfo_file($finfo, $filename);
finfo_close($finfo);
?>
上面的写法就没有问题。搞不懂是什么问题。让高手去解决吧!
我想说的是。碰到问题多看官方的文档,要仔细的看,会发现解决问题的办法。如果你还找不到magic.mgc
就locate magic.mgc ,把找到的文件放里去,试试就知道了。
不要嫌我说的罗嗦,这个只是我的一个经历,希望对大家有帮助。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/88151/showart_1713289.html |
|