Как вы получаете куски бинарных файлов в 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))