Я попытался использовать Zlib для распаковки файла, но он просто сказал "Ошибка данных" и дал мне пустой файл.
Это код, который я пробовал:
// Open a new temp file to write new file to
$tempFile = fopen("tempFile", "w");
// Make sure tempFile is empty
ftruncate($tempFile, 0);
// Write new decompressed file
fwrite($tempFile, zlib_decode(file_get_contents($path))); // $path = absolute path to data.tar.Z
// close temp file
fclose($tempFile);
Я также пытался распаковать его по частям, перейдя от .tar.Z к .tar только к файлу. Я попытался использовать функции lzw, чтобы снять .Z, но я не смог заставить его работать. Есть ли способ сделать это?
EDIT:
Вот еще один код, который я попробовал. Просто убедитесь, что работает file_get_contents
. Я все еще получаю "ошибку данных".
$tempFile = fopen("tempFile.tar", "w");
// Make sure tempFile is empty
ftruncate($tempFile, 0);
// Write new decompressed file
$contents = file_get_contents($path);
if ($contents) {
fwrite($tempFile, gzuncompress($contents));
}
// close temp file
fclose($tempFile);
EDIT2: Я думаю, причина, по которой LZW не работает, заключается в том, что содержимое файла .tar.Z выглядит следующим образом:
��3dЀ��0p���a�
H�H��ŋ3j��@�6l�
Функции LZW, которые я пробовал, используют оба слова ASCII в словарях. Что это за персонажи?