[英]How to download files in zip in php (yii)
如何在php yii框架中下載用戶上傳的文件?
我在我的網站上有用戶列表,每個用戶可以為每個部分上傳多個文件(工作信息,教育,證書等)
上傳的文件將保存在上傳文件中。 鏈接在這里
C:\wamp\www\project\themes\mydesign\assets\global\uploads
在上載文件夾中,還有許多其他文件夾,這些文件夾以用戶ID命名。
C:\wamp\www\project\themes\mydesign\assets\global\uploads\1\
C:\wamp\www\project\themes\mydesign\assets\global\uploads\2\
C:\wamp\www\project\themes\mydesign\assets\global\uploads\3\
1,2,3是user1,user2,user3 ..的文件夾名稱,而1,2,3是user1,user2,user3的id
。
用戶首次上載任何文件並保存時,將在上載文件夾中創建該用戶的文件夾。
所有用戶文件的每個部分均保存在其文件夾中。.現在,我想在CgridView中為每個用戶的刪除按鈕附近添加一個下載按鈕..我想為我想要的任何用戶以zip下載所有文件。
有這樣做的示例代碼嗎? 我應該使用什么工具,擴展程序或庫? 還是有可用的代碼? 我是yii的新手,不知道如何獲取每個用戶的所有文件並下載到zip文件夾中。 有什么建議么。
步驟1:您需要在網格中生成關聯鏈接,以調用Yii控制器-> action,比如說actionZipDownload。 為此,請單擊下面的鏈接:確保還將userId傳遞給該操作。
http://www.yiiframework.com/wiki/593/yii-cgridview-add-custom-button/
步驟2:在基於傳遞的userId的操作上,您需要根據您的設置(目錄結構)將目標關聯用戶目錄路徑。
步驟3:從該特定目錄中讀取所有文件,添加用於zip創建的文件,並將zip文件存儲在一個臨時目錄中。 郵政編碼名稱可以是userId_date.zip
第2步和第3步的源可能如下所示,您需要對$ destination的相對路徑進行一些調整。 另外,請檢查php文檔中的http://php.net/manual/zh/class.ziparchive.php
<?php
public function actionZipDownload(){
$userId = $_GET['userId']; // get the passed user id
$zip=new Zip Archive();
$destination=dirname($_SERVER['DOCUMENT_ROOT'])."/project/themes/mydesign/assets/global/uploads/".$userId."/filename.zip";
if($zip->open($destination,ZIPARCHIVE::CREATE) !== true) {
return false;
}
$doclist=CUploadedFile::getInstancesByName('files');
foreach($doclist as $thefile)
{
$random=rand(11111,99999);
$filename=$random.$thefile;
$zip->addFile($thefile->tempname,$filename);
}
$zip->close();
}
?>
步驟4:成功生成zip后,將響應發送到瀏覽器以進行下載。
步驟5:成功下載后,您可能需要刪除temp zip存檔以節省空間。
從步驟2到步驟5,點擊此鏈接http://www.bsourcecode.com/yii-framework/yii-files/yii-zip-format/
希望會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.