2016-08-30 4 views
1

サブフォルダにアーカイブするファイルを追加します。ファイルをサブフォルダにZIPアーカイブに追加しますか?

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); 

私は自分のフォルダのすべてのファイルを必要としないので、使用できません。私はそれを行うサイクルで

$paths = [ 
[ 
    'name' => 'file', 
    'ext' => 'txt', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'subFolder', 
    'ext' => 'folder', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'fileInSubFolder', 
    'ext' => 'txt', 
    'path' => '/folder/subFolder/' 
] 
]; 

: 私はファイルに関するいくつかの情報を持つ配列持つ「フォルダ」場合

if($folder[$i]['ext'] == 'folder') 
    $zip->addEmptyDir($fileName); 
else 
    $zip->addFromString($fileName.$fileExt, file_get_contents($fileFullPath.$fileExt)); 

を、私はアーカイブにファイルを追加する他に、アーカイブに空のフォルダを作成します。 しかし、ファイルがサブフォルダ内にあれば、ファイルはアーカイブのルートに追加されます。 そして、新しい空のサブフォルダにファイルを追加するにはどうしたらいいですか? または、現在のディレクトリを追加ファイルに変更するにはどうすればよいですか?

答えて

0

ZipArchiveを使用して「ディレクトリを変更」しないでください。ファイルを追加するときに絶対パスを常に渡します。

さて、私はあなたが$paths配列を持っている理由はよく分からないが、その後、あなたは私はあなたのコードのすべてを$foldersをループを見ることができないので、しかし、あなたは$paths配列をループされた場合は、絶対パスを追加したいと思うあなたファイル名の先頭に格納されています。

$paths = [ 
[ 
    'name' => 'file', 
    'ext' => 'txt', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'subFolder', 
    'ext' => 'folder', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'fileInSubFolder', 
    'ext' => 'txt', 
    'path' => '/folder/subFolder/' 
] 
]; 


if($paths[$i]['ext'] == 'folder') { 
    $zip->addEmptyDir($fileName); 
} else { 
    // This would create "/folder/subFolder/fileInSubFolder.txt" 
    $fullFileName= $paths[$i]['path'] . $paths[$i]['name'] . "." . $paths[$i]['ext']; 
    $zip->addFromString($fullFileName, /* File Data Here */); 
} 
+0

ありがとう!私はちょうど混乱した。私は "addFromString"の最初のパラメータはファイル名だと思っていましたが、相対パスを設定する必要があります。アーカイブするフォルダから開始してください。 ありがとうございます! –

関連する問題