Распаковка в переменную
Мне нужно обработать содержимое заархивированного файла, но я не могу изменить разрешения на сервере, где будет размещаться моя программа.
Это означает, что я не могу загрузить 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;
}
Я надеюсь, что это поможет вам.