Frage

Ich versuche, eine zu tun unten auf die Antwort „Preg alle Ergebnisse“ alle die binären Daten zu erhalten. Ich habe so ziemlich alles erdenkliche versucht, und für das Leben von mir, kann nichts bekommen.

Ich habe gehofft, dass es so einfach sein würde als so etwas wie dies zu tun:

preg_match_all("#\n\n(.*)\n--$boundary#",$body,$matches);

Aber ich kann nichts bekommen. Ich habe auch andere Sachen ausprobiert. \ R \ n | i s m U -. Ich kann es einfach nicht aus irgendeinem Grund bekommen

Hier ist eine Pseudo-Antwort nicht einschließlich der Header:

--boundary
content-type:image/jpeg

<binary data>
--boundary
content-type:image/jpeg

<binary data>
--boundary
content-type:image/jpeg

<binary data>
--boundary

leider die binären Daten nicht eingeschlossen mit <&> es ist nur Rohdaten mit Sonderzeichen im Laufe von mehreren Zeilen ...

auch: Ich denke, das Problem liegt in den tatsächlichen binären Daten, die angezeigt wird, weil, wenn ich ein Preg laufen alle auf der Info entspricht darüber ganz gut funktioniert, aber wenn ich es auf den tatsächlichen Daten versuchen, die hat alle die binären Daten in ihm Mist, es funktioniert nicht.

War es hilfreich?

Lösung

Alternativ können Sie analysieren mit explode () sollte viel schneller sein, es ist nicht zu komplex, und es gibt Ihnen die Header-Informationen, wenn Sie es wollen:

<?php

$body = file_get_contents('output.txt');
$boundary = '__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__';
$parts = explode("--$boundary", $body);
array_shift($parts); # delete up to the first boundary
array_pop($parts); # delete after the last boundary

$binaries = array();
foreach($parts as $part) {
    list($header, $binary) = explode("\n\n", $part, 2);
    $binaries[] = $binary;
}    

print_r($binaries);

Andere Tipps

\n ist plattformabhängig. Vermutlich ist Ihre Daten eine http-Anfrage oder eine E-Mail? In diesem Fall werden die Zeilenumbrüche \r\n, so dass Sie für diese Stelle

testen müssen

Sie ist Ausdruck scheint für mich zu funktionieren auf den von Ihnen angegebenen Daten. Ich zog Sie Ihre output.php, und benannte sie output.txt, lief dann dieses Skript:

<?php

$body = file_get_contents('output.txt');
$boundary = '__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__';
preg_match_all("#\n\n(.*)\n--$boundary#",$body,$matches);
print_r($matches);

Es scheint, hat gut funktioniert zu haben, dh es diese gedruckt:

Array
(
    [0] => Array
        (
            [0] => 

    [body] => 
--__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__
            [1] => 

ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
--__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__
            [2] => 

ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
--__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__
            [3] => 

ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
--__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__
            [4] => 

ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
--__NEXT_PART_gc0p4Jq0M2Yt08jU534c0p__
        )

    [1] => Array
        (
            [0] =>     [body] => 
            [1] => ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
            [2] => ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
            [3] => ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
            [4] => ÿ( RAW IMAGE DATA CONTINUES OVER MULTIPLE LINES starts with "ÿ" ends with "ÿÙ" )ÿÙ
        )

)

Sieht aus wie die $ treffer [1] enthält die Liste der Binärdaten Sie nach.

Ich habe keine Antwort in Bezug auf Ihren regulären Ausdrücke, aber hast du einen Blick auf Zend_Mime ?

Ok, gut bin ich nicht so vertraut mit PHP regulären Ausdrücken ...

Unter Berücksichtigung, was Sie versuchen zu tun, sollten die Dot-matches-Newline s Schalter arbeiten. Mit diesem regulären Ausdruck schien Arbeit an meinem Ende:

/<binary data>\r\n(.*?)\r\n--simple boundary/s

*? sein nicht gierige sollte, und so ist es nur so viel verschlingen wird als die erste --Einfach Grenze Textzeichenfolge übereinstimmen es sieht.

Ihre Zeilenende von meinem unterscheiden können (ich auf einem Windows-Rechner bin), so dass Sie ein Hex-Editor anwerfen müssen möglicherweise genau zu sehen, was vor und nach dem <binary data> Inhalt angepasst werden solle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top