我的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
答案 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";
}