Я использую метод extractTo
класса PHP PharData
для проверки содержимого файл phar и столкнулся с некоторыми странными результатами. Я достиг предела своей детективной работы на уровне байтов и надеялся, что кто-нибудь здесь сможет помочь мне разобраться с этим.
Далее следуют подробности, но в целом: когда я извлекаю свои архивные файлы с помощью PharData::extractTo
, файлы, которые я получаю, выглядят как bzip
, но команде bzip2
они не нравятся. Это нормальное поведение phar
или это проблема конкретного архива? (или, возможно, комбинация PHP/OS, которую я использую). Есть ли способ получить простые текстовые файлы из архива phar — или должен быть обычный текст по умолчанию, и я смотрю на странное поведение системы?
В частности, когда я запускаю команду
$phar = new Phar('n98-magerun.phar');
$phar->extractTo('/tmp/n98-magerun');
В моей ОС 10.6.8, Mac на базе Intel со встроенным 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.
pax
в старых системах Mac. - person dev-null-dweller   schedule 15.04.2013extractTo
поддерживает только разархивирование варианта ustar. Поскольку я не генерирую архив, а архив извлекается правильно, я не уверен, что это актуально. (под этим я подразумеваю, что я буквально не уверен: я раньше не занимался фарами) - person Alan Storm   schedule 15.04.2013