你如何在PHP中获得大块的二进制文件?

时间:2012-11-02 15:03:21

标签: php file-io binaryfiles magic-numbers sfx

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

由于我在Linux机器上运行它,我需要切断文件的SFX可执行部分并将压缩文件保存在文件系统上,然后我将运行一个程序来解压缩/解压缩。 (SFX存档基本上是一个EXE文件,后面加上压缩存档。我用十六进制编辑器手动尝试了这个,以及它可以正常工作。)

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

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

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

2 个答案:

答案 0 :(得分:2)

正则表达式是二进制安全的。不过,使用strpos可能会更好。

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

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

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

这将从幻数(包括)开始获取存档数据。

答案 1 :(得分:1)

您可以使用preg_match语法\xXX二进制文件:

preg_match('/\x00/', chr(0))