Я пытаюсь разархивировать папку в PHP и сделать что-то с файлами. У меня это работает нормально, но мне нужно, чтобы это работало для заархивированных папок внутри корня заархивированной папки.
Таким образом, zipped1 может содержать image1 и zipped2. Мне нужно извлечь zip2, а также. Я пытаюсь сделать это с помощью рекурсии, как показано ниже. Очевидно, что это не полный код, а соответствующие биты.
$tempFile = $_FILES['Filedata']['tmp_name'];
function handle_zip($ZipHandler)
{
while($zip_entry = zip_read($ZipHandler))
{
$ext = explode(".",zip_entry_name($zip_entry))[1];
if($ext=="zip")
handle_zip(zip_open($zip_entry));
}
}
$ZipHandler = zip_open($tempFile);
handle_zip($ZipHandler);
zip_close($ZipHandler);
Таким образом, проблема заключается в том, что при рекурсивном вызове функции необходимо отправить файл в качестве аргумента, но zip_open, похоже, открывает загруженные файлы в их временной папке на сервере — и этот рекурсивный пакет не находится в этой временной папке.
Что я могу сделать, пожалуйста?
Я не пробовал это, но вы могли бы попробовать
zip_entry_open($zip_entry,$entry);
handle_zip(zip_open($entry));
в рекурсивном вызове. это это соответствующая страница документа.
Также вы можете захотеть получить последнюю часть разнесенного результата вместо второй, если в имени файла указано несколько точек или их нет.
Других решений пока нет …