PHP来提取;some dir/file.ext“;从焦油到;另一个目录/file.ext“;

PHP来提取;some dir/file.ext“;从焦油到;另一个目录/file.ext“;,php,tar,phar,Php,Tar,Phar,我使用由第三方每月创建的.tar.gz。我可以解压缩到.tar;但是当我从tar中提取文件时,我无法覆盖tar目录名 tar有一个文件夹“dirname\u latestDate”,其中包含许多文件。我希望通过指定要提取的单个文件,可以忽略tar的“文件夹”(测试脚本是从stackoverflow和其他地方的代码拼凑而成) 但这仍然会导致文件被放置在名为per tar folder的子目录中,例如/mypath/my dir/tar dirname/file.ext 我可以从子目录复制文件,然后

我使用由第三方每月创建的.tar.gz。我可以解压缩到.tar;但是当我从tar中提取文件时,我无法覆盖tar目录名

tar有一个文件夹“dirname\u latestDate”,其中包含许多文件。我希望通过指定要提取的单个文件,可以忽略tar的“文件夹”(测试脚本是从stackoverflow和其他地方的代码拼凑而成)

但这仍然会导致文件被放置在名为per tar folder的子目录中,例如/mypath/my dir/tar dirname/file.ext

我可以从子目录复制文件,然后删除,但这似乎是无效和不必要的。有没有办法覆盖un Tar上的Tar文件夹名称?
tar包含一个大约4MB的文件(未压缩)和一些其他小型文件。

否,您不能直接使用
extractTo
更改输出文件名


但是,您可以将
文件\u put\u contents
$phar['filepath]->getContent()
结合使用来手动提取文件。

否,您不能直接使用
extractTo
更改输出文件名

但是,您可以使用
file\u put\u contents
$phar['filepath]->getContent()
手动提取文件

$archive = new PharData($theTar);
// error cheecking excluded    
foreach($archive as $entry) {
  $extractDir = basename($file) . '/';
  if($file->isDir()) {
    $dir = new PharData($file->getPathname());          
    foreach($dir as $child) {
      $extract_file = $extractDir . basename($child);
      $archive->extractTo('/mypath/my-dir', $extract_file, true);
    }
  }
}