免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2030 | 回复: 0
打印 上一主题 下一主题

linux下增加pecl fileinfo [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-10 22:11 |只看该作者 |倒序浏览
来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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP