Если вы знаете, имя файла внутри .zip, просто сделать это:
<?php
$xml = file_get_contents('zip://./your-zip.zip#your-file.xml');
Если у вас есть обычную строку, просто сделать это:
<?php
$xml = file_get_contents('compress.zlib://data://text/plain;base64,'.$base64_encoded_string);
[редактировать] Документация есть: http://www.php.net/manual/en/wrappers.php
Из комментариев: если у вас нет кодированной в base64 строки, вам необходимо установить urlencode() перед использованием обертки data://
.
<?php
$xml = file_get_contents('compress.zlib://data://text/plain,'.urlencode($text));
[править 2] Даже если вы уже нашли решение с файлом, есть решение (для теста) я не видел в своем ответе:
<?php
$zip = new ZipArchive;
$zip->open('data::text/plain,'.urlencode($base64_decoded_string));
$zip2 = new ZipArchive;
$zip2->open('data::text/plain;base64,'.urlencode($base64_string));
У меня, похоже, проблема. Запуск zip не удается, даже если он, похоже, написал zip-файл в память. Я пробовал file_get_contents из php: // памяти, и это строка (0) ... – transilvlad
Да, извините - мой код в этом случае не так. Методы file_put_contents() не работают в потоках ввода-вывода: https://bugs.php.net/bug.php?id=50886&edit=2. Поэтому вам нужно работать с 'fopen()', 'fwrite()' и 'stream_get_contents()' для записи/чтения в 'php: // memory' – HenningCash
Очевидно, вы уже выяснили: это невозможно. Я просто добавил несколько причин для ответа. Удачи в любом случае! – HenningCash