我正在使用extractTo
PHPPharData
类的方法来检查 phar 文件的内容并遇到了一些 strage 结果。我已经达到了我的字节级侦探工作的极限,希望这里有人能够帮助我解决这个问题。
详细信息如下,但一般来说:当我用 提取我的存档文件时PharData::extractTo
,我得到的文件似乎是一个变体bzip
,但bzip2
命令不喜欢它们。这是正常phar
行为,还是特定存档有问题?(或者可能是我正在使用的 PHP/OS 组合)。有没有办法从 phar 存档中获取纯文本文件 - 或者纯文本应该是默认的,我正在寻找奇怪的系统行为?
具体来说,当我运行命令时
$phar = new Phar('n98-magerun.phar');
$phar->extractTo('/tmp/n98-magerun');
在我的 OS 10.6.8 上,基于 Intel 的 Mac 使用内置的 PHP 5.3.6,存档成功解压到 /tmp/n98-magerun 文件夹中。
我提取的档案可以在这里找到。
如果我打开在 BBEdit 中提取的任何文本文件,我会看到正确的内容。
但是,如果我使用其他工具,例如 quicklook vi
、 或cat
,我会看到二进制数据。我在尝试ack
/grep
通过文件内容时注意到了这一点,但没有得到预期的结果。
如果我file
在文件上使用命令,它会报告它是一个bzip
文件。
$ file MIT-LICENSE.txt
MIT-LICENSE.txt: bzip2 compressed data, block size = 400k
并使用十六进制编辑器检查文件确认文件以BZ
标题开头
但是,尝试解压缩文件bzip2
会导致以下错误
$ bzip2 -d MIT-LICENSE.txt
bzip2: Can't guess original name for MIT-LICENSE.txt -- using MIT-LICENSE.txt.out
bzip2: Compressed file ends unexpectedly;
perhaps it is corrupted? *Possible* reason follows.
bzip2: No such file or directory
Input file = MIT-LICENSE.txt, output file = MIT-LICENSE.txt.out
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
bzip2: Deleting output file MIT-LICENSE.txt.out, if it exists.
我可以bzcat
成功地文件,尽管它在文件中间用这个
bzcat: Compressed file ends unexpectedly;
perhaps it is corrupted? *Possible* reason follows.
bzcat: Undefined error: 0
Input file = MIT-LICENSE.txt, output file = (stdout)
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.