Download all Files in a Directory from my Website into a Zip Folder
所有的,我允许用户上传图片到我的网站。对于那个用户,我想从我的网站下载用户上传到我的网站的所有图片。所以我想基本上有一个用户名下拉列表,然后当我选择一个查询我的数据库并获得他们下载的所有图像时。那部分没有问题。
我的问题是如何浏览这些文件并将它们放入一个zip文件夹,然后下载zip文件夹(如果可能的话)。
关于如何做这种事有什么想法吗?
事先谢谢!
编辑:我知道如何使用以下代码下载压缩后的文件:
1 2 3 4 |
多亏了@maxhud的帮助,我才想出了完整的解决方案。下面是用于实现我期望结果的最后一个代码片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <?php /* creates a compressed zip file */ function create_zip($files = array(),$destination = '',$overwrite = true) { //if the zip file already exists and overwrite is false, return false if(file_exists($destination) && !$overwrite) { return false; } //vars $valid_files = array(); //if files were passed in... if(is_array($files)) { //cycle through each file foreach($files as $file) { //make sure the file exists if(file_exists($file)) { $valid_files[] = $file; } } } //if we have good files... if(count($valid_files)) { //create the archive $zip = new ZipArchive(); if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; } //add the files foreach($valid_files as $file) { $zip->addFile($file,$file); } //debug //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; //close the zip -- done! $zip->close(); //check to make sure the file exists return file_exists($destination); } else { return false; } } $files_to_zip = array( 'upload/1_3266_671641323389_14800358_42187034_1524052_n.jpg', 'upload/1_3266_671641328379_14800358_42187035_3071342_n.jpg' ); //if true, good; if false, zip creation failed $zip_name = 'my-archive.zip'; $result = create_zip($files_to_zip,$zip_name); if($result){ header('Content-Type: application/zip'); header('Content-disposition: attachment; filename=filename.zip'); header('Content-Length: ' . filesize($zip_name)); readfile($zip_name); } ?> |
结合使用这两种功能:
http://php.net/manual/en/function.readdir.php
允许运行系统命令的php命令
- http://php.net/manual/en/function.exec.php
- http://www.php.net/manual/en/function.system.php
一个系统命令
- http://linux.about.com/od/commands/l/blcmdl1_zip.htm
- http://linux.about.com/od/commands/l/blcmdl1_tar.htm
一般来说效率更高。
例如,创建文件系统的备份并覆盖以前的备份
1 2 3 4 5 6 7 | $uploads = wp_upload_dir(); $file_name = 'backup_filesystem.tar.gz'; unlink($uploads['basedir'] . '/' . $file_name); ob_start(); $output = shell_exec(sprintf('tar -zcvf %s/%s %s', $uploads['basedir'], $file_name, ABSPATH)); ob_end_clean(); |
注意:输出缓冲区,以防php-to-shell命令有输出,并且不希望头已经发送错误。