Как получить структуру каталогов zip-файла в PHP?
zipfile.zip
структура каталога файла будет
Папка A -> Папка B -> Папка C -> image1.png, image2.png, image3.png
Ниже приведен код, который я пробовал. Но это не повторяет ничего.
$zip = zip_open('zipfile.zip');
while($zip_entry = zip_read($zip)){
$filename = zip_entry_name($zip_entry);
echo $filename."<br/>";
}
Все, что я хочу, так как O/P
FolderArray => A, B, C
FileArray => image1.png, image2.png, image3.png.
Можно ли получить O/P в виде двух массивов? Как я могу различить файл и папку, используя PHP zip команды?
Как я могу прочитать эту структуру каталогов с помощью php?
2 ответа
Я не очень уверен, что ты хочешь, но вот одно предположение. Не могли бы вы проверить, что найденная запись является папкой, если это последний символ /
?
Новая папка.zip контент
New folder/New folder/New folder/New Text Document (2).txt
New folder/New folder/New folder/New Text Document.txt
New folder/New folder/New Text Document.txt
Код
$zip = zip_open('New folder.zip');
$dirs = $files = array();
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$zen = zip_entry_name($zip_entry);
$is_dir = substr($zen, -1) == DIRECTORY_SEPARATOR;
$zen_splitted = explode(DIRECTORY_SEPARATOR, $zen);
if ($is_dir) {
$dirs[] = $zen_splitted[count($zen_splitted)-2];
} else {
$files[] = $zen_splitted[count($zen_splitted)-1];
}
}
zip_close($zip);
}
print_r($dirs);
print_r($files);
Выход
Array
(
[0] => New folder
[1] => New folder
[2] => New folder
[3] => New folder (2)
)
Array
(
[0] => New Text Document (2).txt
[1] => New Text Document.txt
[2] => New Text Document.txt
)
$zip = zip_open('zipfile.zip');
if ($zip) {
while ($zip_entry = zip_read($zip)) {
echo "Name: " . zip_entry_name($zip_entry) . "\n";
echo "Actual Filesize: " . zip_entry_filesize($zip_entry) . "\n";
echo "Compressed Size: " . zip_entry_compressedsize($zip_entry) . "\n";
echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
if (zip_entry_open($zip, $zip_entry, "r")) {
echo "File Contents:\n";
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "$buf\n";
zip_entry_close($zip_entry);
}
echo "\n";
}
zip_close($zip);
}
Извлечено из http://www.php.net/manual/en/zip.examples.php
Заметка
Но это не поддерживает способ выяснить, является ли это папка или файл.