2016-11-30 4 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」を作成し、我々はすでに変数を持っているので、内部のファイルを追加するには意味をなさない。

関連する問題