Распаковка в переменную

Мне нужно обработать содержимое заархивированного файла, но я не могу изменить разрешения на сервере, где будет размещаться моя программа.

Это означает, что я не могу загрузить zip-файл на сервер, поэтому мне нужно прочитать содержимое файла в переменную, не записывая его в файловую систему.

Могу ли я получить содержимое строки такой переменной и получить разархивированное содержимое в новую переменную?

До сих пор я изучал использование расширения zip php и библиотеки pclzip, но оба должны использовать реальные файлы.

Вот что я хочу сделать в псевдокоде:

$contentsOfMyZipFile = ZipFileToString();
$myUnzippedContents = libUnzip($contentsOfMyZipFile);

Есть идеи?

2 ответа

Посмотрите на этот пример.

<?php
$open = zip_open($file);

if (is_numeric($open)) {
    echo "Zip Open Error #: $open";
} else {
while($zip = zip_read($open)) {
    zip_entry_open($zip);
    $text = zip_entry_read($zip , zip_entry_filesize($zip));
    zip_entry_close($zip);
}
print_r($text);
?>

Я использую это в моем проекте:

 function unzip_file( $data ) {
    //save in tmp zip data
    $zipname = "/tmp/file_xxx.zip";

    $handle = fopen($zipname, "w");
    fwrite($handle, $data);
    fclose($handle);

    //then open and read it.
    $open = zip_open($zipname);

    if (is_numeric($open)) {
        echo "Zip Open Error #: $open";
    } else {
        while ($zip = zip_read($open)) {
            zip_entry_open($zip);
            $text = zip_entry_read($zip, zip_entry_filesize($zip));
            zip_entry_close($zip);
        }
    }
    /*delete tmp file and return variable with data(in this case plaintext)*/
    unlink($zipname);
    return $text;
 }

Я надеюсь, что это поможет вам.

Другие вопросы по тегам