2017-03-18 8 views
-1

나는 상황을 가지고, 나는 사용자 정보의 목록을 가지고, 그 데이터 세부 사항에, 나는 또한 파일을 저장했습니다. 이제 다운로드와 같은 버튼을 클릭 할 때 zip 파일에있는 모든 사용자 파일을 다운로드하고 싶습니다.Yii2 생성 zip 파일 및 다운로드 - Y122.0

나는 다운로드 할 파일을 가져 오는 컨트롤러에서 작업을 작성했지만 zip finle을 작성하고 다운로드 할 수없는 코드는 작성할 수 없습니다. 다음은 컨트롤러에있는 코드입니다.

public function actionMain($jid) 
{ 
    $values = UserRequest::find()->where(['sender_code'=>$jid,'status'=>1])->all(); 
     $i=1; foreach($values as $data) { 
      $users = Users::find()->where(['access_code'=>$data->reciever_code])->one(); 
      $file_names[]= $users->attach_cv; 
     } 
} 

괜찮습니다. $ file_name im은 모든 파일을 가져온다.하지만이 파일을 zip foder로 다운로드하고 싶다.

나를이 문제

에서 제공하는 링크가 핵심 PHP에 쉽게 그 구현을 해결하는 데 도움이 바랍니다. 그러나 프레임 워크에서 동일한 작업을 수행하는 방법에 대해 알아보십시오. 나는 파일 이름 배열을 가지고 있기 때문에. 위에서 볼 수 있듯이. .ZIP 생성을위한 코드를 동일한 액션이나 다른 액션으로 작성해야합니다.

+0

가능한 복제 [디렉토리에있는 모든 파일을 압축하여 .ZIP 다운로드 생성 (HTTP에 다운로드 zip 파일의 경로를 반환 할 수 있습니다//stackoverflow.com/questions/17708562/zip-all-files-in-directory-and-download-zip-generated) – SiZE

+0

코어 PHP에는 tat 솔루션이 없습니다. Yii2.0 프레임 워크에서해야합니다. –

+0

답변 자체에서 설명 할 수없는 이유를 설명하십시오. 또한 전체 점이 여러 데이터 파일에서 ZIP 파일을 생성하는 경우 개별 파일 생성을 우회하지 않고 질문을 줄이고 모든 관련없는 세부 정보를 삭제해야합니다. – einpoklum

답변

0

SiZE에 의해 설명 된대로 ZipArchive을 사용하는 것이 좋습니다. 그런 식으로 다운로드를 시작하기 전에 압축 프로세스를 시작하십시오.

파일 생성 :

/** 
* Generate zip file for upload 
* 
* @throws Exception 
*/ 
private function createZip($files) 
{ 
    $file = 'full_path_to_file/your_file_name.zip'; 

    $zip = new ZipArchive(); 
    if ($zip->open($file, ZipArchive::CREATE) !== TRUE) { 
     throw new \Exception('Cannot create a zip file'); 
    } 

    foreach($files as $file){ 
     $zip->addFile($file[file_name], $file[local_name]); 
    } 

    $zip->close(); 

} 

그리고 당신은 당신의 행동

+0

조금 더 자세히 설명해 주실 수 있습니까? 나는 새로운이에요. –