0

我正在尝试使用此类使用 php 创建 zip 存档:Site

第一个问题:

在数组中$files_to_zip。我需要在所有日期中添加应用程序的路径,我该怎么做?

转换这个数组:

$files_to_zip = array(
'preload-images/1.jpg',
'preload-images/2.jpg',
'preload-images/5.jpg',
'kwicks/ringo.gif',
'rod.jpg',
'reddit.gif'
  );

对此:

$files_to_zip = array(
'path/to/app/preload-images/1.jpg',
'path/to/app/preload-images/2.jpg',
'path/to/app/preload-images/5.jpg',
'path/to/app/kwicks/ringo.gif',
'path/to/app/rod.jpg',
'path/to/app/reddit.gif'
  );

第二个问题:

创建 ZIP 时,他们会创建存档路径的每个文件夹。示例:ZIP > 文件夹“路径”> 文件夹“到”> 文件夹“应用程序”> 档案。

我只想要 ZIP 中的档案。

我不知道我在哪里更改代码或出了什么问题。请帮忙?

4

2 回答 2

2

这是第一个问题的解决方案

$files_to_zip = array(
'preload-images/1.jpg',
'preload-images/2.jpg',
'preload-images/5.jpg',
'kwicks/ringo.gif',
'rod.jpg',
'reddit.gif'
 );

$dir = 'c:/xampp/htdocs/test/'; 
$new_files = array();
  foreach($files_to_zip as $value){
   $new_files[] = $dir.$value;
}
print_r($new_files);

对于第二个问题,您可以使用PCLZIP

require_once('pclzip.lib.php');
// Create Object
$archive = new PclZip("compressed.zip");
/*
$compress = $archive->add($p_filelist, $p_option, $p_option_value, ...);

$files_archive = $archive->add($new_files, PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_OPT_ADD_PATH, 'myFiles');
Here, 
$new_files = Array of files
PCLZIP_OPT_REMOVE_PATH = http://www.phpconcept.net/pclzip/user-guide/29
PCLZIP_OPT_ADD_PATH = http://www.phpconcept.net/pclzip/user-guide/28
*/
$files_archive = $archive->add($new_files, PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_OPT_ADD_PATH, 'myFiles');
if ($files_archive == 0) {
    die("Error : ".$archive->errorInfo(true));
}   
else{
    echo "Archive Created";
}

因此,总体而言,您的代码将如下所示:

<?php
require_once('pclzip.lib.php');
$files_to_zip = array(
'preload-images/1.jpg',
'preload-images/2.jpg',
'preload-images/5.jpg',
'kwicks/ringo.gif',
'rod.jpg',
'reddit.gif'
 );

$dir = 'c:/xampp/htdocs/test/'; 
$new_files = array();
  foreach($files_to_zip as $value){
   $new_files[] = $dir.$value;
}
print_r($new_files);
// Create Object
$archive = new PclZip("compressed.zip");
/*
$compress = $archive->add($p_filelist, $p_option, $p_option_value, ...);

$files_archive = $archive->add($new_files, PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_OPT_ADD_PATH, 'myFiles');
Here, 
$new_files = Array of files
PCLZIP_OPT_REMOVE_PATH = http://www.phpconcept.net/pclzip/user-guide/29
PCLZIP_OPT_ADD_PATH = http://www.phpconcept.net/pclzip/user-guide/28
*/
$files_archive = $archive->add($new_files, PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_OPT_ADD_PATH, 'myFiles');
if ($files_archive == 0) {
    die("Error : ".$archive->errorInfo(true));
}   
else{
    echo "Archive Created";
}
于 2013-09-02T16:13:46.410 回答
1

第一个问题解决方案

foreach($files_to_zip as &$value){
   $value = 'path/to/app/'.$value
}

或使用 array_walk

第二个问题:

尝试创建 tmp 文件夹,将每个文件复制到其中并压缩它们。
这是最简单的解决方案。
不要忘记删除 tmp 文件。

于 2013-09-02T15:30:32.670 回答