2012-01-06 2 views
3

저는 codeigniter를 사용하여 사용자가 gmail과 같은 파일을 다운로드 할 수있게 웹 사이트를 만들고 있습니다. 그 말은 사용자가 단지 하나의 파일이나 zip 폴더의 모든 파일을 다운로드 할 수 있다는 것을 의미합니다. ,Codeigniter - 여러 파일을 가져 와서 이름을 바꾼 다음 압축합니다.

Array 
(
    [0] => Array 
     (
      [file_id] => 2 
      [file_name] => v6_copy.pdf 
      [file_path] => uploads/4/d5/67697ff58d09d3fb25d563bf85d3f1ac.pdf 
     ) 

    [1] => Array 
     (
      [file_id] => 3 
      [file_name] => v4_copy.pdf 
      [file_path] => uploads/7/cf/38212079635e93a8f8f4d4a3fc2a11ff.pdf 
     ) 

) 

은 내가해야 할 것은 :

많은 파일이있을 것이기 때문에

, 내가 중복을 피하기 위해 자신의 이름을 인코딩하고 저에게이 같은 배열을 반환 데이터베이스에 원래 이름을 저장 한 각 파일을 가져 와서 원래 이름으로 바꾼 다음 하나의 zip으로 압축하십시오. 현재 codeigniter zip 도우미를 사용하려고하는데 파일 이름을 바꿀 수없는 것 같습니다.

foreach ($query->result() as $row) // This returns what you see above 
{ 
    // I need to rename the file somewhere here 
    $this->zip->read_file($row->filename); 
} 

$this->zip->download('files_backup.zip'); 

, 수동으로 디렉토리를 만들고 그 이름을 변경, 파일을 복사 한 다음 파일을 압축하는 않고 할 수있는 방법이 있나요?

가장 큰 도움을주었습니다.

답변

1

감사에서, 나는 해결책을 찾아 냈다. 그는 Codeigniter가 파일의 이름을 바꿀 수 없다는 것에 완전히 옳았습니다. 그러나 라이브러리에 대한 정말 빠른 변경을 발견했으며 작동하는 것으로 보입니다.

@Gordon에서 언급 한 것과 같은 시스템> librairies-> Zip.php로 이동하면 "read_file"을 검색하면 해당 기능을 찾을 수 있습니다.

function read_file($path, $preserve_filepath = FALSE, $name = NULL) // Added $name 
{ 
    if (! file_exists($path)) 
    { 
     return FALSE; 
    } 

    if (FALSE !== ($data = file_get_contents($path))) 
    { 
      if($name == NULL){ // Added a verification to see if it is set, if not set, then it does it's normal thing, if it is set, it uses the defined var. 
     $name = str_replace("\\", "/", $path); 

     if ($preserve_filepath === FALSE) 
     { 
      $name = preg_replace("|.*/(.+)|", "\\1", $name); 
     } 
      } 

     $this->add_data($name, $data); 
     return TRUE; 
    } 
    return FALSE; 
} 

나는이 다른 사람을 도움이되기를 바랍니다 :

은 아래 참조, 그럼 난 단순히 함수에 인수를 추가 한 후, 코드의 일부를 수정했습니다. 고마워요. @Gordon

+0

git repo에 풀 요청을 보내고 싶을 수 있습니다. 그들이 그것을 받아들이면, 다른 사람들도 그 변화를 사용할 수 있습니다. – Gordon

+0

끌기 요청이란 무엇입니까? – denislexic

+1

http://help.github.com/send-pull-requests/을 참조하십시오. – Gordon

3

CodeIgniter의 Zip 클래스 apparently은 항목의 이름을 바꾸는 방법을 제공하지 않습니다. PHP의 네이티브 Zip Extension을 사용하면 파일을 아카이브에 추가 할 때 이름을 변경할 수 있습니다.

예 @Gordon의 대답 PHP Manual

$zip = new ZipArchive; 
if ($zip->open('test.zip') === TRUE) { 
    $zip->addFile('/path/to/index.txt', 'newname.txt'); 
    $zip->close(); 
    echo 'ok'; 
} else { 
    echo 'failed'; 
} 
+0

멋지다. 재미있다. @Gordon에 감사드립니다. 그것도 Codeigniter와 같은 임시 파일에 저장합니까? 그 말은, 한번 donwloaded되면 자동으로 삭제합니까? – denislexic

+0

@denislexic 확실하지 않음 tbh. 디스크에 기록 된 것 같습니다. – Gordon

관련 문제