PHP:: 从文件夹中的文件中选择性地打包 zip 档案
PHP:: Selectively pack zip-archives from files in folder
我有一个包含几百个文件的文件夹。
文件名总是类似于######_### - #######.ext 它们的共同点是分隔符“-”。分隔符前同名的文件视为同一个文章组。
我想要实现的是 运行 一个扫描整个文件夹并从这些文件创建 zip 存档的 php 文件。每个存档应包含来自一个文章组的所有文件,并在分隔符之前命名为文件名以了解其内容。
示例(文件名;是的,它们可能有空格):
- Article_1 - 子类型 a.ext
- Article_1 - 子类型 b.ext
- Article_2 - 子类型 a.ext
- Article_2 - 子类型 b.ext
- Article_2 - 子类型 c.ext
在 运行 完成该过程后,应该有 2 个存档(在本例中)。一个名为 Article_1.zip 的文件包含前两个文件,因为它们形成了一个组。第二个文件包含其余三个文件并命名为 Article_2.zip,因为它们组成一个组。
我在 array_count_values、array_key_exists 等问题上摆弄了大约半天,但我卡在了那个点上。此外,我确信我将分隔符之前的部分作为文件名的方法已经很复杂和过度了。
如有任何帮助,我将不胜感激! :)
php根据文章名分隔文件的代码如下:-
<?php
$array = Array('Article_1 - Subtype a.ext','Article_1 - Subtype b.ext','Article_2 - Subtype a.ext','Article_2 - Subtype b.ext','Article_2 - Subtype c.ext');
$new_array = array();
foreach($array as $arr) {
$exploded_array = explode("-", $arr);
$new_array[$exploded_array[0]][] = $arr;
}
echo "<pre/>";
print_r($new_array);
?>
再次感谢。发布可以解决问题的最终代码:
(MV是存放待打包文件的子文件夹)
$files = scandir('MV/');
$arr2 = array();
foreach($files as $arr)
{
$exploded_array = explode(" - ", $arr);
$arr2[$exploded_array[0]][] = $arr;
}
for($k=0;$k<count($arr2);$k++)
{
$zip = new ZipArchive();
$key = key($arr2);
$title = './'.$key.'.zip';
if ($zip->open($title, ZipArchive::CREATE)!==TRUE)
{
exit("cannot open <$filename>\n");
}
for($l=0;$l<count($arr2[$key]);$l++)
{
$zip->addFile('MV/'.$arr2[$key][$l],$arr2[$key][$l]);
}
next($arr2);
echo 'The zip archive ', $title,' contains ',$zip->numFiles,' files.';
echo '<br>';
$zip->close();
}
?>
我有一个包含几百个文件的文件夹。 文件名总是类似于######_### - #######.ext 它们的共同点是分隔符“-”。分隔符前同名的文件视为同一个文章组。
我想要实现的是 运行 一个扫描整个文件夹并从这些文件创建 zip 存档的 php 文件。每个存档应包含来自一个文章组的所有文件,并在分隔符之前命名为文件名以了解其内容。
示例(文件名;是的,它们可能有空格):
- Article_1 - 子类型 a.ext
- Article_1 - 子类型 b.ext
- Article_2 - 子类型 a.ext
- Article_2 - 子类型 b.ext
- Article_2 - 子类型 c.ext
在 运行 完成该过程后,应该有 2 个存档(在本例中)。一个名为 Article_1.zip 的文件包含前两个文件,因为它们形成了一个组。第二个文件包含其余三个文件并命名为 Article_2.zip,因为它们组成一个组。
我在 array_count_values、array_key_exists 等问题上摆弄了大约半天,但我卡在了那个点上。此外,我确信我将分隔符之前的部分作为文件名的方法已经很复杂和过度了。
如有任何帮助,我将不胜感激! :)
php根据文章名分隔文件的代码如下:-
<?php
$array = Array('Article_1 - Subtype a.ext','Article_1 - Subtype b.ext','Article_2 - Subtype a.ext','Article_2 - Subtype b.ext','Article_2 - Subtype c.ext');
$new_array = array();
foreach($array as $arr) {
$exploded_array = explode("-", $arr);
$new_array[$exploded_array[0]][] = $arr;
}
echo "<pre/>";
print_r($new_array);
?>
再次感谢。发布可以解决问题的最终代码: (MV是存放待打包文件的子文件夹)
$files = scandir('MV/');
$arr2 = array();
foreach($files as $arr)
{
$exploded_array = explode(" - ", $arr);
$arr2[$exploded_array[0]][] = $arr;
}
for($k=0;$k<count($arr2);$k++)
{
$zip = new ZipArchive();
$key = key($arr2);
$title = './'.$key.'.zip';
if ($zip->open($title, ZipArchive::CREATE)!==TRUE)
{
exit("cannot open <$filename>\n");
}
for($l=0;$l<count($arr2[$key]);$l++)
{
$zip->addFile('MV/'.$arr2[$key][$l],$arr2[$key][$l]);
}
next($arr2);
echo 'The zip archive ', $title,' contains ',$zip->numFiles,' files.';
echo '<br>';
$zip->close();
}
?>