PHP免费文件内容分析器库/函数
Posted
技术标签:
【中文标题】PHP免费文件内容分析器库/函数【英文标题】:PHP free file content analyzer library / function 【发布时间】:2013-08-28 05:31:33 【问题描述】:我想知道你是否知道我可以在我的脚本中包含任何好的和准确的 php 库或文件,以便分析 X 文件的内容,然后检查它是否是特定类型,如 .doc、.docx .jpg等。
我知道 PHP 提供了大量的库,我们可以使用它们来检查它们,但它们根本不是那么准确,有些只是检查文件扩展名或文件头(他们甚至不知道文件是否是否损坏)
我要求的是非常准确、简单和快速的东西(可能我要求太多了),但任何链接或建议都会被接受和感激,谢谢!
【问题讨论】:
为了达到您想要的准确度,您可能需要为每种格式使用一个成熟的库,一个真正解析文件的库。不过,它总是比标题检查慢。为什么这是必要的 - 文件头检查是否不够?为什么不呢? Pekka,你所说的对每种格式使用不同的专用库是正确的,但标题对我来说还不够,因为假设我有我想分析的 jpeg 图像,标题可能会没关系,但图像本身已损坏,当我想转换它们或将它们剪切为缩略图(使用我使用的 GD 库)时,函数(主要是 imagecreatefromjpeg)会给我带来错误,并且为了创建一个好的缩略图我需要一个有效的图像。除了我想用它来防止病毒或代码注入.. 【参考方案1】:我为此做的是打开文件,阅读它,然后搜索文件头。它们中的大多数都可以在其***格式定义中找到。
%PDF 用于 pdf,前 4 个字符。 %PNG 表示 png,前 4 个字符。
还没有看到图书馆可以做到这一点。
【讨论】:
【参考方案2】:据我所知,不存在这样的库;拥有一个也没有意义。
假设我有想要分析的 jpeg 图像,标题可能没问题,但图像本身已损坏,当我想转换它们或将它们剪切为缩略图时(使用 GD 库,这是我使用)函数(主要是 imagecreatefromjpeg)会给我带来错误,为了创建一个好的缩略图,我需要一个有效的图像。
捕获带有格式错误的标头的格式错误的 JPG 文件的最佳位置是 GD 在尝试处理它时出错。只需以透明和有用的方式处理它(= 让用户知道出了问题)。为什么要添加本质上必须做同样事情的额外代码?
通过在错误发生时对其进行处理,您还可以捕捉到文件的简单分析无论如何都无法揭示的问题 - 例如,GD 无法处理 CMYK JPG。尽管如此,CMYK JPG 仍然是完全有效的文件。另一个例子是文件太大而无法在您的服务器上处理。
当然,您可以事先对每个上传的文件进行标题或大小检查。但是,根据您的意愿进行单独检查是没有意义的。
除了我想用它来防止病毒或代码注入..
这不是一个现实的目标。如果您使用检查它打开文件的库容易受到注入的影响怎么办?
此外,这样的注射非常罕见;库漏洞往往被广泛宣传,并迅速提供补丁。只需让您的机器保持最新状态即可。
如果你真的需要企业级的病毒防护,那就买一个服务器端的病毒检测产品吧。
【讨论】:
是的,我从 imagecreatefromstring(除了 imagecreatefromjpeg)中捕获了错误,并且很难处理这些错误,首先是因为该函数在失败的情况下返回一个布尔值,但错误被 PHP 编译器触发(显示消息)我添加了 @ 运算符以避免它的可见性,有时也会抛出有效图像的错误!并且除了(也是最令人头疼的部分)是它还使用可能类似于 PHP 的“警告”的通知,当文件损坏或无效时它会抛出通知而不是错误,这使得很难验证 @Neo 我意识到这些东西很麻烦,但它应该都是可以修复的。如果出现问题,imagecreatefromstring()
将始终返回 false
。这基本上是起点。警告和通知可以被捕捉到,但也许根本没有必要——如果图像通过了标题检查(例如使用 getimagesize()
)然后又失败了,那么它有很大的问题,可能不需要告诉用户正是 what 是错误的。我知道的所有主要图片上传服务要么接受图片,要么说“出了点问题。尝试另一张图片”
可能是我唯一的出路,但我需要研究该函数的行为,即使使用 @ 运算符也会触发通知,我也会收到有效图像“丢失字节”的错误,我不知道为什么 GD 没有设计一个简单的整数返回来报告进程状态的函数..
够了,也很简单,我知道,但我的意思是该函数以不同的方式报告每个错误(警告、通知等),但是是的,你是对的,我'会尝试,如果函数接受它那么它是有效的,我唯一需要的是处理异常..
好吧,Pekka,我想就是这样,非常感谢您的帮助,我会接受您的回答并尝试您的建议.. 问候! :)以上是关于PHP免费文件内容分析器库/函数的主要内容,如果未能解决你的问题,请参考以下文章