2013-09-02 2 views
0

Я пытаюсь почтовый архив создающих с PHP с помощью этого класса: SiteСоздание ZIP-архива в PHP

Первая проблема:

в массиве $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' 
); 

Вторая проблема:

Когда Z была создана, они создают каждую папку на стезе архив. Пример: ZIP> папка «путь»> папка «в»> папку «приложение»> архивы.

Я хочу только архивы в ZIP.

Я не знаю, где я меняю код или что не так. Помощь pls?

+1

Вторая проблема в том, что из класса вы используете. Он использует путь к файлу в качестве имени файла внутри zip. – camerondm9

ответ

1

первое решение проблемы

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

или использовать array_walk

вторая проблема:

попытку создать папку TMP, скопируйте все файлы на него и почтовый эм.
Это самое простое решение.
Не забудьте удалить файлы tmp.

1

Вот первое решение проблемы

$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"; 
} 
+0

Спасибо. Первое решение идеально. Во-вторых, я удалил полный путь имени файла в zip-классе, используя str_replace. (см. комментарий в вопросе). –