PharData::extractTo
(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 ファイルシステムには、ファイル名で使う場合にサポートしていない文字があります。具体的には、
<|>*?":
です。末尾にドットがあるファイル名もサポートしていません。いくつかの展開ツールと異なり、このメソッドはこれらの文字をアンダースコアで置き換えませんし、そのようなファイルを展開すると失敗します。
User Contributed Notes 3 notes
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>';
?>