【问题标题】:PHP - Unpack module with hexstringPHP - 使用十六进制字符串解压模块
【发布时间】:2018-04-25 17:59:00
【问题描述】:

我基本上想要实现的是:

  1. 将上传的文件(图片、exe等)读取为二进制数据
  2. 将其转换为十六进制字符串
  3. 检查是否包含字符串

我已经修补并设法编写了一个执行上述操作的代码,但是,我目前的问题如下:

字符串“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 将视情况为真/假。

标签: php upload hex


【解决方案1】:

您可以尝试根据小写文件数据检查针:

$hex = unpack("H*", strtolower(file_get_contents($filetmp)));
$hex = current($hex);
if (strpos($hex, '6e6565646c65' !== false) {
    //found
}

另外,检查false,因为strpos 将返回一个错误的0,如果它在开头找到。

【讨论】:

  • 我明白了,PHP 变量就是这样工作的?我习惯了 C#,所以我确信我必须以某种方式转换类型。谢谢,成功了,感激不尽。
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 2018-08-21
  • 2020-11-07
  • 2018-06-27
  • 2018-09-13
  • 2010-10-04
  • 2014-05-26
相关资源
最近更新 更多