PHP распаковать zip и вставить контент в базу данных - PullRequest
0 голосов
/ 13 сентября 2011

Мне нужно иметь возможность извлечь zip-файл и вставить имена файлов из zip-файла в базу данных.

Я искал и нашел несколько сценариев для распаковки zip-файла, но мне кажется, что я не могу получить отдельные имена файлов в zip-файле.

1 Ответ

0 голосов
/ 13 сентября 2011

Я бы, вероятно, предложил использовать два системных вызова:

1) разархивировать в папку tmp 2) прочитать файлы из этой папки

(обновленный полный рабочий скрипт):

<?php

if (isset($_POST["fsubmit"])){
    echo "<pre>";
    var_dump($_POST);
    var_dump($_FILES);
    $tmp_dir = "tmp/" . microtime(true);
    if (!file_exists($tmp_dir)){
        mkdir($tmp_dir);
    }
    if (is_uploaded_file($_FILES["file"]["tmp_name"])){
        move_uploaded_file($_FILES["file"]["tmp_name"], $tmp_dir . "/a.zip");
        exec("unzip -z -j $tmp_dir $tmp_dir" . "/a.zip");
        exec("ls $tmp_dir", $out);
        echo "Files in the archive:\n";
        foreach ($out as $file){
            $file = trim($file);
            echo "File: $file,", filesize($tmp_dir . "/" . $file)."b\n";
        }
        exec("rm -rf $tmp_dir");
    }
} else {
?>
<form action="test.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="fsubmit" value="upload">
</form>
<?
}

Предварительные требования
0) будут работать, если вы находитесь под Unix / Linux / Mac (не работает под Windows)
1) создайте test.php и вставьте в него код выше
2) убедитесь, что в той же папке, где test.php находится папка tmp
3) убедитесь, что пользователь apache может написать эту папку (например, chmod 777 tmp)
4) убедитесь, что ваш php разрешает загрузку файлов
5) убедитесь, что на вашем сервере есть «unzip» инструмент командной строки

С уважением.

...