0

我正在创建一个 PHP 应用程序,它会在某个时候从网站下载 SFX 存档并需要从中提取数据。

由于我在 Linux 机器上运行它,我需要删除文件的 SFX 可执行部分并将压缩文件保存在文件系统上,然后我将运行一个程序来解压缩/提取。(SFX 档案基本上是一个 EXE 文件,其后附加了压缩档案。我已经用十六进制编辑器手动尝试过这个,它工作得很好。)

SFX 存档中压缩存档的文件类型将始终相同,我知道该文件类型的幻数是什么。

然后我需要在 PHP 中做的是,在下载文件(让我们假设一个简单的file_get_contents()使用 URL 参数)并且它位于内存中之后,我需要从压缩存档的幻数开始的内容中提取数据。

我在想我也许可以做某种正则表达式方法,但是,我需要将其处理为二进制信息(幻数需要表示为十六进制)而不是字符数据。幻数本身包含非打印/不显示为任何可读字符的十六进制值。

4

2 回答 2

2

正则表达式是二进制安全的。但是,您可能会更好strpos

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

假设幻数是 0x1A 0x09 0x01 - 你可以用实际的数字替换它。然后:

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

This will get the archive data from the magic number (included) onwards.

于 2012-11-02T15:11:46.847 回答
1

您可以使用以下语法进行preg_match二进制处理:\xXX

preg_match('/\x00/', chr(0))
于 2012-11-02T15:10:41.357 回答