Я загружаю электронную таблицу Google Диска через API в PHP. Запрос возвращает таблицу XLSX
, и мне нужно разархивировать ее. Чтобы сохранить ответ на временный, а затем вызов, скажем, zip_open()
, есть способ, которым я могу просто передать такой метод в строку?PHP unzip string
ответ
Я думаю, что ваш лучший вариант - создать временный файл, а затем распаковать его.
// Create a temporary file which creates file with unique file name
$tmp = tempnam(sys_get_temp_dir(), md5(uniqid(microtime(true))));
// Write the zipped content inside
file_put_contents($tmp, $zippedContent);
// Uncompress and read the ZIP archive
$zip = new ZipArchive;
if (true === $zip->open($tmp)) {
// Do whatever you want with the archive...
// such as $zip->extractTo($dir); $zip->close();
}
// Delete the temporary file
unlink($tmp);
Я написал бы временный файл сам, но вы можете увидеть первый комментарий здесь: http://de3.php.net/manual/en/ref.zip.php
wdtemp на Seznam точка CZ Привет, если у вас есть необработанного из ZIP ФАЙЛ В ТОЛЬКО СТРОКИ, и вы не можете создавать файлы на своем сервере (из-за SAFE MODE), чтобы иметь возможность создать файл, который вы можете передать в zip_open(), вам будет трудно получить несжатое содержимое ваших данных ZIP. Это может помочь: я написал простую функцию декомпрессии ZIP для распаковки первого файла из архива, хранящегося в строке (независимо от того, какой файл он). Это как раз о разборе локального заголовка файла первого файла, получение необработанных сжатых данных этого файла и декомпрессии этих данных (как правило, данные в ZIP-файлах сжимаются методом «DEFLATE», поэтому мы будем просто распаковать это функция gzinflate() тогда).
<?php
function decompress_first_file_from_zip($ZIPContentStr){
//Input: ZIP archive - content of entire ZIP archive as a string
//Output: decompressed content of the first file packed in the ZIP archive
//let's parse the ZIP archive
//(see 'http://en.wikipedia.org/wiki/ZIP_%28file_format%29' for details)
//parse 'local file header' for the first file entry in the ZIP archive
if(strlen($ZIPContentStr)<102){
//any ZIP file smaller than 102 bytes is invalid
printf("error: input data too short<br />\n");
return '';
}
$CompressedSize=binstrtonum(substr($ZIPContentStr,18,4));
$UncompressedSize=binstrtonum(substr($ZIPContentStr,22,4));
$FileNameLen=binstrtonum(substr($ZIPContentStr,26,2));
$ExtraFieldLen=binstrtonum(substr($ZIPContentStr,28,2));
$Offs=30+$FileNameLen+$ExtraFieldLen;
$ZIPData=substr($ZIPContentStr,$Offs,$CompressedSize);
$Data=gzinflate($ZIPData);
if(strlen($Data)!=$UncompressedSize){
printf("error: uncompressed data have wrong size<br />\n");
return '';
}
else return $Data;
}
function binstrtonum($Str){
//Returns a number represented in a raw binary data passed as string.
//This is useful for example when reading integers from a file,
// when we have the content of the file in a string only.
//Examples:
// chr(0xFF) will result as 255
// chr(0xFF).chr(0xFF).chr(0x00).chr(0x00) will result as 65535
// chr(0xFF).chr(0xFF).chr(0xFF).chr(0x00) will result as 16777215
$Num=0;
for($TC1=strlen($Str)-1;$TC1>=0;$TC1--){ //go from most significant byte
$Num<<=8; //shift to left by one byte (8 bits)
$Num|=ord($Str[$TC1]); //add new byte
}
return $Num;
}
?>
Посмотрите функции ZLIB (если таковые имеются в вашей системе). Насколько я знаю, есть что-то вроде zlib-decode
(или так), которое может обрабатывать необработанные данные zip.
- 1. PHP Unzip Local File
- 2. php unzip удаленный файл
- 3. Unzip Code PHP error
- 4. PHP Unzip после загрузки FTP
- 5. exec ('unzip gallery.zip', $ return); PHP
- 6. PHP Unzip очень большой файл
- 7. Unzip Error java.io.EOFException с java unzip-кодом
- 8. Почему я получаю IO :: Uncompress :: Unzip :: unzip: input filename - это undef или null string message?
- 9. Улучшите мою функцию Unzip & Move - PHP
- 10. Данные UnZip в C#
- 11. Unzip файл не работает
- 12. Java UnZip программа
- 13. Java // unzip error: MALFORMED
- 14. Android UNZIP Inputstream проблема
- 15. Unzip .gz files
- 16. PHP string! = Variable = 'string'
- 17. Unzip binary email attachment
- 18. Выполнение программы unzip программно
- 19. Unzip with spring integration
- 20. Pentaho unzip file
- 21. Sys.glob() в пределах unzip()
- 22. Unzip Archive с Groovy
- 23. Unzip в сценарии bash
- 24. unzip строки в javascript
- 25. unzip a .zip file
- 26. Unzip AWS object
- 27. Unzip и Unrar одновременно
- 28. unzip file silent vbscript
- 29. Perl IO :: Uncompress :: Unzip
- 30. Flex AIR unzip
Позор, он не может читать поток, ну, это работает :) –