декомпрессия — может ли PHP распаковать файл taz? (.Tar.Z)

Я пытался использовать 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, но я не смог заставить его работать. Есть ли способ сделать это?

РЕДАКТИРОВАТЬ:
Вот еще немного кода, который я пробовал. Просто чтобы убедиться, что 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 в своих словарях. Что это за персонажи?

13

Решение

Итак, вы хотите распаковать файл ТАЗ изначально с PHP? Дай мой новый расширение попробовать!

lzw_decompress_file('3240_05_1948-1998.tar.Z', '3240_05_1948-1998.tar');
$archive = new PharData('/tmp/3240_05_1948-1998.tar');
mkdir('unpacked');
$archive->extractTo('unpacked');

Также обратите внимание, причина, по которой функции zlib не работают, заключается в том, что вам нужно сжатие LZW, а не сжатие gzip.

4

Другие решения

в соответствии с этим URL https://kb.iu.edu/d/acsy ты можешь попробовать

<?php

$file = '/tmp/archive.z';
shell_exec("uncompress $file");

если у вас нет Unix, как проверка ОС https://kb.iu.edu/d/abck для соответствующей программы.

1

Файл сжимается сжатием LZW, и я пробовал несколько, но, похоже, нет надежного способа их распаковки в PHP. Ответ Cosmin содержит правильный первый шаг, но после использования вашей системы uncompress Утилита для распаковки файла, вам все равно придется извлечь файл TAR. Это можно сделать с помощью встроенных инструментов PHP для обработки своих пользовательских файлов PHAR.

// the file we're getting
$url = "ftp://ftp.ncdc.noaa.gov/pub/data/hourly_precip-3240/05/3240_05_2011-2011.tar.Z";
// where to save it
$output_dir = ".";
// get a temporary file name
$tempfile = sys_get_temp_dir() . basename($url);
// get the file
$compressed_data = file_get_contents($url);
if (empty($compressed_data)) {
echo "error getting $url";
exit;
}
// save it to a local file
$result = file_put_contents($tempfile, $compressed_data);
if (!$result) {
echo "error saving data to $tempfile";
exit;
}
// run the system uncompress utility
exec("/usr/bin/env uncompress $tempfile", $foo, $return);
if ($return == 0) {
// uncompress strips the .Z off the filename
$tempfile = preg_replace("/.Z$/", "", $tempfile);
// remove .tar from the filename for use as a directory
$tempdir = preg_replace("/.tar$/", "", basename($tempfile));
try {
// extract the tar file
$tarchive = new PharData($tempfile);
$tarchive->extractTo("$output_dir/$tempdir");
// loop through the files
$dir = new DirectoryIterator($tempdir);
foreach ($dir as $file) {
if (!$file->isDot()) {
echo $file->getFileName() . "\n";
}
}
} catch (Exception $e) {
echo "Caught exception untarring: " . $e->getMessage();
exit;
}
} else {
echo "uncompress returned error code $return";
exit;
}
0

Пожалуйста, попробуйте это.

 <?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // extract all files
$phar->extractTo('/another/path', 'file.txt'); // extract only file.txt
$phar->extractTo('/this/path',
array('file1.txt', 'file2.txt')); // extract 2 files only
$phar->extractTo('/third/path', null, true); // extract all files, and overwrite
} catch (Exception $e) {
// handle errors
}
?>

Источник : http://php.net/manual/en/phardata.extractto.php
Я не проверял это, но я надеюсь, что это будет работать для вас.

-2
По вопросам рекламы [email protected]