如何使用特定文件名保存提取的zip文件

时间:2019-06-30 18:37:13

标签: php zip

我的zip文件中只有一个文件,但是每次都有新名称。我需要提取文件并以特定文件名保存它,而不是提取一个。

  $zip = new ZipArchive;
  $res = $zip->open($tmp_name);
  if ($res === TRUE) {

   $path = _PATH."/files/";
   $zip->extractTo($path);
   $zip->close();
   echo 'Unzip!';
  }

Abowe代码有效,但我需要具有特定的文件名。例如,位于zip(例如 pricelist025.xml )下的任何文件都应命名为 temp.xml

1 个答案:

答案 0 :(得分:1)

在提取特定文件之前重命名它。

$zip = new ZipArchive;
$res = $zip->open($tmp_name);

if ($res === TRUE) {       
    $zip->renameName('pricelist025.xml','temp.xml');
    $path = _PATH."/files/";
    $zip->extractTo($path);
    $zip->close();
    echo 'Unzip!';
    } else {
             echo 'failed, code:' . $res;
       }

我希望这能奏效。
更新1

如果要更改文件名,有两个选项。
1.解压缩前更改文件名-这样将修改zip文件
2.解压缩后更改文件名- Zip文件将保持之前的状态

提取前更改文件名

我们必须为文件名定义一个模式。
在这里,文件将位于此模式中:myfile0.xml, myfile1.html, adn so on..
注意:扩展名将被保留。

$zip = new ZipArchive;
$res = $zip->open('hello.zip');

$newfilename = 'myfile';
for($i=0;$i<$zip->count();$i++)
{ 
   $extension = pathinfo($zip->getNameIndex($i))['extension'];
   $zip->renameName($zip->getNameIndex($i), $newfilename.$i.'.'.$extension);

 }

解压缩后的文件名

文件名将采用与上述相同的格式。

$directory = 'hello/'; //your extracted directory
$newfilename = 'myfile';

foreach (glob($directory."*.*") as $index=>$filename) {

      $basename = pathinfo($filename)['basename'];


      if(!preg_match('/myfile\d\./', $basename)) {

                $extension = pathinfo($filename)['extension'];

                rename($filename,$newfilename.$index.'.'.$extension);
                }
      }

我们在这里扫描从提取的目录中所有文件,这些文件在模式myfile[num].中没有文件名,然后我们更改其名称。

更新2

我刚刚发现您已更新问题。
由于您只有一个文件,因此每次都想使用不同的名称来提取它。
每次提取时都应重命名。

$zip = new ZipArchive;
$newfilename = "myfile".rand(1,999); //you can define any safe pattern here that suites you

if($zip->open('help.zip')===TRUE)
{
    $path = '/your/path/to/directory';

    $filename = $zip->getNameIndex(0);


    if($zip->extractTo($path))
    {
        echo "Extracted";
     }else{
           echo "Extraction Failed";
        exit();
     }

     $extension = pathinfo($filename)['extension'];

     rename($path."/$filename",$path."/$newfilename".'.'.$extension);

     echo "Extracted with different name successfully!";

  } else {  
        echo "Failed";
  }