Как вы получаете куски бинарных файлов в PHP?

Я создаю приложение PHP, которое в какой-то момент загрузит архив SFX с веб-сайта и должен извлечь из него данные.

Так как я запускаю это на Linux-машине, мне нужно отрубить исполняемую часть файла SFX и сохранить сжатый файл в файловой системе, чтобы затем запустить программу для распаковки / распаковки. (SFX-архивы - это, в основном, EXE-файл с сжатым архивом, прикрепленным после него. Я пробовал это вручную с помощью шестнадцатеричного редактора и так далее, и он работает просто отлично.)

Тип файла сжатого архива в SFX-архиве всегда будет одинаковым, и я знаю магическое число для этого типа файлов.

Что нужно сделать в PHP после загрузки файла (предположим, что file_get_contents() используя параметр URL), и он находится в памяти, мне нужно извлечь данные из содержимого, начиная с магического номера сжатого архива.

Я думал, что мог бы, возможно, сделать какой-то метод регулярных выражений, однако мне нужно обрабатывать это как двоичную информацию (магическое число должно быть выражено в шестнадцатеричном виде), а не символьные данные. Само магическое число содержит шестнадцатеричные значения, которые не печатаются / не отображаются в качестве любого читаемого символа.

2 ответа

Решение

Регулярные выражения являются бинарно-безопасными. Однако вам может быть лучше с strpos,

$magicpos = strpos($downloaded_data,"\x1a\x09\x01");

При этом предполагается, что магическое число равно 0x1A 0x09 0x01 - вы можете заменить его на любое число, которое есть на самом деле. Затем:

$archive = substr($downloaded_data,$magicpos);

Это позволит получить архивные данные от магического номера (в комплекте) и далее.

Вы можете preg_match бинарный с \xXX синтаксис:

preg_match('/\x00/', chr(0))
Другие вопросы по тегам