2016-11-30 3 views
2

symfony 컨트롤러에서 파일 (UploadedFile 객체)을 변수로 사용합니다.PHP ZipArchive와 파일을 변수로 사용

"php ZipArchive"로이 "변수"를 열고 추출하고 싶습니다. 그러나 open() 메서드는 파일 시스템의 파일 이름 인 문자열을 기다리고 있습니다. ZipArchive로 파일을 처리하고 FS에 파일 변수를 쓰지 않고도 어떤 방법으로 파일을 처리 할 수 ​​있습니까?

+0

ZipArchive 클래스로 메모리에서 zip 파일을 처리하는 방법이 없다고 생각합니다. 당신은 항상 tmp 디렉토리에 파일을 저장할 수 있습니다 .. -> sys_get_temp_dir() – Jimmmy

+0

고마워, 내가 좀 봐야 겠어. – Qonq

답변

1

tmpfile()을 사용하여 임시 파일을 만들고이 파일에 쓰고 zip에서 사용할 수 있습니다. 예 :

<?php 

$zip = new ZipArchive(); 
$zip->open(__DIR__ . '/zipfile.zip', ZipArchive::CREATE); 

$fp = tmpfile(); 
fwrite($fp, 'Test'); 
$filename = stream_get_meta_data($fp)['uri']; 

$zip->addFile($filename, 'filename.txt'); 
$zip->close(); 

fclose($fp); 
2

리틀 개선 :

$zipContent; // in this variable could be ZIP, DOCX, XLSX etc. 

$fp = tmpfile(); 
fwrite($fp, $zipContent); 
$stream = stream_get_meta_data($fp); 
$filename = $stream['uri']; 

$zip = new ZipArchive(); 
$zip->open($filename); 
// profit! 
$zip->close(); 
fclose($fp); 

그냥 "zipfile.zip"를 만들고 우리는 이미 변수가 있기 때문에, 내부 파일을 추가하는 것은 의미하지 않습니다.