2015-04-14 2 views
0

Я хочу прочитать двоичные данные из файла и отправить его в удаленное приложение Java. Как я нашел here: я могу получить его, как это (часть моего кода):Echo двоичные данные в php, так что код Java

else 
{ 
    $fp = fopen("binary file","rb"); 
    $vector=""; 
    while (!feof($fp)) { 
     // Read the file, in chunks of 16 byte 
     $data = fread($fp,16); 
     $arr = unpack("C*",$data); 
     foreach ($arr as $key => $value) { 
      $vector.=" ".$value; 
     } 
     $vector.="\n"; 
    } 
} 

Я посылаю некоторые заголовки

header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol); 
    header("MIME-Version: 1.0".$eol); 
    header("Connection: Keep-Alive".$eol); 
    header("Accept-Encoding: gzip, deflate".$eol); 
    header("Host: host".$eol.$eol); 
    header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol); 
    header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol); 

Тогда я печатаю это так:

echo "--".$BOUNDARY.$eol; 
echo "Content-Type: application/octet-stream".$eol; 
echo "Content-Length: ".strlen($vector).$eol; 
echo "Content-Transfer-Encoding: binary".$eol; 
echo $eol.$vector.$eol; 
echo "--".$BOUNDARY."--".$eol; 

Я тестирую его в приложении Advanced Rest Client и вижу двоичные данные:

0 0 0 72 0 54 0 55 0 97 0 56 0 51 0 49 
0 101 0 56 0 45 0 53 0 102 0 48 0 56 0 45 
0 52 0 100 0 49 0 99 0 45 0 97 0 57 0 57 
0 52 0 45 0 101 0 101 0 53 0 97 0 51 0 52 
0 49 0 52 0 50 0 54 0 57 0 51 0 0 0 1 
0 0 0 0 4 0 0 1 0 0 0 0 1 0 0 0... 

Но Java-кодер говорит, что вместо двоичных данных есть пустая строка? Как я могу правильно эхо-повторить эти двоичные данные? Что может вызвать эту проблему?

Update: Мы обнаружили, что независимо от того, что Content-Length заголовок я установил в своем приложении он получает заголовок: Content-Length: 475 Однако в клиенте Advanced Rest я вижу свою ценность контента длины , Это может вызвать проблемы. Может ли это быть вызвано php каким-то образом?

ответ

0

Возможно, 2 $eol «s в этой строке вызывает последующие заголовки не будут отправлены:

header("Host: host".$eol.$eol); 

Попробуйте изменить его на 1, или на самом деле я сомневаюсь, что даже нужно полукокс EOL в строке вы отправляете в header().

+0

Собирайтесь проверить это сейчас. –

+0

Результат тот же = ( –