【发布时间】:2018-04-25 17:59:00
【问题描述】:
我基本上想要实现的是:
- 将上传的文件(图片、exe等)读取为二进制数据
- 将其转换为十六进制字符串
- 检查是否包含字符串
我已经修补并设法编写了一个执行上述操作的代码,但是,我目前的问题如下:
字符串“needle”转换为十六进制的“6e6565646c65”;如果字母大写(区分大小写),则在文件中不匹配。例如,它不会与“Needle”或“needlE”匹配。
那么,如何在不区分大小写的情况下检查文件中是否存在字符串?我尝试不将文件更改为十六进制字符串并检查原始数据,但不幸的是,我无法让它工作。
这是我现在的代码:
$hex = unpack("H*", file_get_contents($filetmp));
$hex = current($hex);
if (strpos(strtolower($hex), '6e6565646c65'){
//string "needle" matches in the file
}
您知道使用 PHP 可以做什么吗?这可能是一种完全不同的方法,我不介意,我会研究它。
【问题讨论】:
-
将文件/搜索文本转换为十六进制没有多大意义,您想要/尝试这样做有什么具体原因吗?
-
我在下面得到了解决问题的答案。没有具体原因,这就是我在 C 中处理字节的方式,所以我对 PHP 也是这样做的。
-
啊,好吧,在这种情况下,您还可以执行以下操作:
$contains_needle = (stripos(file_get_contents($filetmp), 'needle') !== false);和$contains_needle将视情况为真/假。