Note that PHAR only supports extracting the 'ustar' variant of the tar archives.
Some systems (such as older versions of Mac OS X) generate the 'pax' format by default.
See here for more information:
http://php.net/manual/pl/phar.fileformat.tar.php
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::extractTo — tar/zip アーカイブの内容をディレクトリに展開する
$directory
, array|string|null $files
= null
, bool $overwrite
= false
): bool
tar/zip アーカイブ内のすべてのファイルをディスクに展開します。
展開されたファイルやディレクトリは、アーカイブに保存されたときのパーミッションを維持しています。
オプションのパラメータを使用すると、どのファイルを展開するかを制御したり
既存のファイルを上書きするかどうかを指定したりすることができます。
2 番目のパラメータ files
には、
展開したいファイルやディレクトリの名前、あるいはその配列を指定します。
デフォルトでは、このメソッドは既存のファイルを上書きしません。
3 番目のパラメータを true にすると既存のファイルを上書きさせることができます。
このメソッドは ZipArchive::extractTo() と同じようなものです。
directory
指定した files
の展開先のパス。
files
展開したいファイル名/ディレクトリ名、あるいはその配列。
overwrite
true
にすると既存のファイルを上書きします。
成功した場合に true
を返します。
しかし、例外がスローされているかどうかを確認したうえで
例外がなければ成功とみなすほうがいいでしょう。
変更内容をディスクに書き込む際にエラーが発生した場合は PharException をスローします。
例1 PharData::extractTo() の例
<?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // すべてのファイルを展開します
$phar->extractTo('/another/path', 'file.txt'); // file.txt のみを展開します
$phar->extractTo('/this/path',
array('file1.txt', 'file2.txt')); // 2 つのファイルだけを展開します
$phar->extractTo('/third/path', null, true); // すべてのファイルを展開し、上書きします
} catch (Exception $e) {
// エラー処理
}
?>
注意:
Windows の NTFS ファイルシステムには、ファイル名で使う場合にサポートしていない文字があります。具体的には、
<|>*?":
です。末尾にドットがあるファイル名もサポートしていません。いくつかの展開ツールと異なり、このメソッドはこれらの文字をアンダースコアで置き換えませんし、そのようなファイルを展開すると失敗します。
Note that PHAR only supports extracting the 'ustar' variant of the tar archives.
Some systems (such as older versions of Mac OS X) generate the 'pax' format by default.
See here for more information:
http://php.net/manual/pl/phar.fileformat.tar.php
I'm unable to extract the first directory from a tar archive:
the destination dir remains empty,
no error is thrown
<?php
$tar = new \PharData('archive.tar');
if ($tar->current()->isDir()) {
echo 'is_dir';
$dir = $tar->current()->getPathname();
$dir = basename($dir);
$tar->extractTo('destination', $dir);
}
?>
the docs hint that the second param could be a name of file OR DIR to be extracted from the archive, is that really possible?
This is an example of how to decompress and unarchive a TAR.GZ file using Phar decompress() and extractTo() methods:
<?php
echo '<h1>TAR.GZ decompress</h1>';
$file_name = 'your_file.tar.gz';
$tar_file_name = str_replace('.gz', '', $file_name);
$dir_file_name = str_replace('.tar.gz', '', $file_name);
// decompress from gz and creates your_file.tar
$p = new PharData($file_name);
$p->decompress();
// unarchive from the tar to folder 'your_file'
$phar = new PharData($tar_file_name);
$phar->extractTo($dir_file_name);
echo '<h1>DONE</h1>';
?>