PHP 7.2 - Parse zip xml stream без сохранения в формате .zip - PullRequest
4 голосов
/ 10 января 2020

Я получаю поток MIME, который содержит простой файл xml и zip-файл xml:

-MIMEBoundaryurn_uuid_A0162A4E6FCACE7B6C1578623716971702885
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:A0162A4E6FCACE7B6C1578623716971702886>

<?xml version='1.0' encoding='UTF-8'?><Response><Status>OK</Status><UUID>A0162A4E6FCACE7B6C1578623716971702886</UUID></Response>
--MIMEBoundaryurn_uuid_A0162A4E6FCACE7B6C1578623716971702885
Content-Type: application/zip
Content-Transfer-Encoding: binary
Content-ID: <urn:uuid:8D7801E6D98280EACC1578624071046>

PK    ÇŽ)Pž¶È®  Ø    A0162A4E6FCACE7B6C1578623716971702886.xmlUT
....
....
    
--MIMEBoundaryurn_uuid_A0162A4E6FCACE7B6C1578623716971702885--

Я могу легко извлечь и проанализировать простой файл xml непосредственно в памяти, но я Не нашли способ сделать то же самое с заархивированным файлом:

есть ли способ проанализировать заархивированный файл xml, не сохраняя его сначала как файл?

что-то вроде

$xml=simplexml_load_string ('zip://'.$zipped_xml_substring);
или
$xml=simplexml_load_string (unzip($zipped_xml_substring));

1 Ответ

1 голос
/ 10 января 2020

Вы проверяли zlib упаковщик (для этого требуется ZIP расширение )?

В комментариях на этой странице вы найдете несколько примеров использования. Я опубликую два из них ниже, которые, я думаю, могут быть актуальны для вас:

$fp = fopen('zip://./foo.zip#bar.txt', 'r');
if( $fp ){
    while( !feof($fp) ){
        echo fread($fp, 8192);
    }
    fclose($fp);
} 

или с использованием php://input input

file_get_contents("compress.zlib://php://input");
...