Запись двоичной строки в файл - PullRequest
0 голосов
/ 22 января 2012

Я получаю запрос, когда я использую echo, он печатает его на оболочке, и все замечательно.

Я хочу записать в файл читаемую человеком строку.

Когда я пытаюсь записать эти сообщения в файл.я вижу двоичную строку.

вот так:

6^@8^@3^@7^@8^@1^@0^@,^@,^@1^@1^@b^@c^@d^@9^@0^@f^@-^@e^@3^@3^@a^@-^@4^@e^@0^@5^@-^@9^@e^@3^@d^@-^@5^@f^@a^@1^@8^@3^@4^@f^@d^@5^@e^@7^@,^@,^@:^@:^@1^@,^@M^@o^@z^@i^@l^@l^@a^@/^@5^@.^@0^@ ^@(^@W^@i^@n^@d^@o^@w^@s^@ ^@N^@T^@ ^@6^@.^@1^@;^@
 ^@W^@O^@W^@6^@4^@;^@ ^@r^@v^@:^@9^@.^@0^@.^@1^@)^@ ^@G^@e^@c^@k^@o^@/^@2^@0^@1^@0^@0^@1^@0^@1^@ ^@F^@i^@r^@e^@f^@o^@x^@/^@9^@.^@0^@.^@1^@,^@F^@i^@r^@e^@f^@o^@x^@,^@9^@.^@0^@,^@W^@i^@n^@d^@o^@w^@s^@,^@,^@0^@,^@0^@,^@0^@,^@0^@,^@0^@,^@,^@
 ^@:^@:^@1^@,^@ ^@1^@/^@2^@1^@/^@2^@0^@1^@2^@ ^@5^@:^@4^@5^@:^@5^@0^@ ^@P^@M^@

но я ожидаю этого:

6837817,,01497aed-181b-4054-b68f-3b41b4e707fc,,::1,Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,Firefox,9.0,Windows,,0,0,0,0,0,, ::1, 1/21/2012 5:45:51 PM

ОК, я видел, что есть такие методы, как pack и unpack чтобы получить строку из двоичной строки, но мне не удалось.

<?php

$context = new ZMQContext();
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->bind("tcp://*:5557");

$fp = fopen('data.txt', 'w');

while(true){ 
$str = $receiver->recv();

echo $str."\n";

file_put_contents('foo.txt', $str);

//fwrite($fp, $str."\n");


}
fclose($fp);
?>

Как я могу это сделать?Я просто хотел записать строку в файл: (

Кроме того, это дорогая операция?

Ответы [ 2 ]

1 голос
/ 22 января 2012

То, что у вас есть, это не двоичные данные, а другая кодировка для текста.Это какая-то форма UCS-2 Я бы сказал.Таким образом, вы можете «расшифровать» его с помощью:

 $string = iconv("UCS-2LE", "UTF-8", $string);
 file_put_contents(...);

См. iconv и UCS-2, BOM FF FE.

1 голос
/ 22 января 2012

Что не так с file_put_contents? http://php.net/file_put_contents

file_put_contents('file/path.ext', $str);
...