2016-01-27 2 views
0

Я попытался создать zip-файл с использованием zip-архива, он отлично работает, хотя zip-файл загружается дважды в две разные папки одновременно, в папку htdocs, где находится исходный код, и папку загрузки по умолчанию из настройки браузера. Есть ли способ предотвратить это? Я только хочу, чтобы загрузить один раз в папку загрузки ...запретить архивировать zip-архив дважды в двух разных папках

$file_names = explode(',', $_REQUEST['files']); 

    $dir = $_REQUEST['currentdir']; 

    //Archive name 
    $archive_file_name="Downloaded_".date("Y-m-d_G-i-s").".zip"; 

    //Download Files path 
    $file_path=$dir; 

    //cal the function 
    zipFilesAndDownload($file_names,$archive_file_name,$file_path); 

    function zipFilesAndDownload($file_names,$archive_file_name,$file_path) 
    { 
    $zip = new ZipArchive(); 
    $res = $zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
if ($res===TRUE) { 
//add each files of $file_name array to archive 
foreach($file_names as $files) 
{ 
    $tt=$file_path."/".$files; 
    if (file_exists($tt)){ 
    $zip->addFile($tt,$files); 
    } 
    else{ 
     return false; 
     exit; 
    } 
} 
$zip->close(); 

//then send the headers to force download the zip file 
header('Content-type: application/zip'); 
header("Content-Disposition: attachment; filename=\"".basename($archive_file_name)."\""); 
header('Pragma: no-cache'); 
header('Expires: 0'); 
//header('Content-Length: ' . filesize($archive_file_name)); 
ob_end_clean(); 
//flush(); 
readfile($archive_file_name); 
exit; 
} 
else{ 
    return false; 
    exit; 
} 

} 
+0

Вы создаете почтовый индекс в папке HTDOCS (PHP сохраняет его там), это причина, почему он там. Вы загружаете его только один раз. –

+0

код должен быть внутри htdocs для запуска, поскольку весь мой PHP-код работает в htdocs ... есть ли какой-нибудь код или способ остановить его создание файла в htdocs? – Annie

+0

Вы можете просто добавить имя каталога к имени файла, после чего оно будет сохранено в указанном каталоге. –

ответ

2

Ваш PHP скрипт создает почтовый индекс в локальном каталоге, который является вашим каталогом htdocs.

У вас есть несколько вариантов в настоящее время:

  • Удалить архив зип после чтения архив с PHP (readfile)
  • Создать архив почтового индекса в подкаталоге, если вам нужно, чтобы сохранить его для последующего использования (архивирование)
  • Создать почтовый индекс во временной папке и удалить почтовый индекс после использования

Я бы с вариантом 3, как это будет гарантировать, что почтовый получает когда-либо удалено I f скрипт умирает, прежде чем удастся его удалить.

Вы можете удалить файл с помощью команды unlink(). Вы просто передаете ему имя файла или путь к файлу, и он делает это (если файл существует). Если вы хотите сохранить его в подкаталоге, просто добавьте имя каталога с разделителем каталога в имя файла. Если вы хотите сохранить его, например. в подкаталоге «downloads» вы просто добавляете downloads/ перед именем файла. $archive_file_name="downloads/Downloaded_".date("Y-m-d_G-i-s").".zip";

Лучшим вариантом здесь является создание zip во временном каталоге сервера и его удаление вручную, поэтому zip будет очищен, как только это будет сделано. Вы получите временный каталог сервера с sys_get_temp_dir(), который вы можете добавить к имени файла. После того как вы закончите свой бизнес, вы можете просто удалить файл с помощью unlink(). $archive_file_name=sys_get_temp_dir()."Downloaded_".date("Y-m-d_G-i-s").".zip";

После того, как вы закончите и хотите удалить файл, который вы просто делаете unlink($archive_file_name);.

Функция ссылка:

http://php.net/unlink

http://php.net/sys_get_temp_dir

+0

Привет, спасибо за ваш ответ, и я попробовал все ваши предложения. Он удалит файл в папке загрузки по умолчанию, а не в файле внутри папки htdocs, который я хочу это будет наоборот.Поэтому я попытался вручную поместить unlink ('C: \\ xampp \\ htdocs \\ test \\'. $ Archive_file_name); для удаления, но результат все равно удалит файл в папке по умолчанию, а не htdocs .. – Annie

+0

Это практически невозможно. PHP не знает, где вы сохраняете файл, который вы загружаете. Вы абсолютно уверены, что не сохраняете файл, который вы загружаете в папку htdocs? –

+0

О, дорогая, моя ошибка, я пометил галочку вокруг настройки браузера минут назад, чтобы сохранить ее в другой папке по умолчанию, и теперь все работает нормально! Огромное спасибо!!!! – Annie

0

После загрузки, вы можете удалить файл на сервере:

(...) 

ob_end_clean(); 
//flush(); 
readfile($archive_file_name); 
unlink($archive_file_name); 

(...) 
+0

Привет, я пробовал это, но он удалит файл в папке загрузки по умолчанию, а не в файле внутри папки htdocs ... – Annie

+0

Моя ошибка ^^ «Я сделал галочку вокруг настройки браузера минут назад, чтобы сохранить ее в другой папке по умолчанию и теперь все работает отлично! Большое спасибо !!!! – Annie

Смежные вопросы