PHP - модуль распаковки с шестнадцатеричной строкой

В основном я пытаюсь достичь:

  1. прочитать загруженный файл (изображение, exe и т. д.) как двоичные данные
  2. преобразовать его в шестнадцатеричную строку
  3. проверьте, содержит ли он строку

Я повозился и смог написать код, который делает то, что сказано выше, однако моя текущая проблема заключается в следующем:

Строка «Игла», которая в шестнадцатеричном формате преобразуется в «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? Это может быть совсем другой метод, я не против, изучу.

Преобразование файла / текста поиска в шестнадцатеричный не имеет особого смысла, есть ли конкретная причина, по которой вы хотите / пытаетесь это сделать?

salathe 25.04.2018 20:31

Я получил ответ ниже, который решает проблему. Нет особой причины, так я обрабатываю байты в C, поэтому я сделал то же самое с PHP.

Karizan 25.04.2018 20:53

Ах, ладно, в этом случае вы также можете сделать что-то вроде: $contains_needle = (stripos(file_get_contents($filetmp), 'needle') !== false); и $contains_needle будут иметь значение true / false в зависимости от ситуации.

salathe 25.04.2018 21:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать проверить иглу по строчным данным файла:

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

Также проверьте наличие false, поскольку strpos вернет ложный 0, если он будет найден в начале.

Понятно, так вот как работают переменные PHP? Я привык к C#, поэтому точно подумал, что мне нужно каким-то образом преобразовать типы. Спасибо, трюк сработал, ценю.

Karizan 25.04.2018 20:51

Другие вопросы по теме