2012-11-20 2 views
1

내 클라이언트의 파이썬 스크립트에서 내 웹 서버의 PHP 스크립트를 실행하고 있습니다. 이제이 이러한 데이터와 잘 작동하지만 어떻게 내가 할이 스트림의 마지막에 내 파일 $ 파일을 추가 할데이터를 송수신하는 방법 Byte Byte By

$file = "gw/gateway.py" 
if (file_exists($file)) { 
    $gw_file_sz = filesize($file); 
    $filesz1 = $gw_file_sz/256; 
    $filesz2 = $gw_file_sz%256; 
} 
    $binarydata = pack("C*", 0x01, $year1, $year2, $day1, $day2, $min1, $min2, $sec, 0x00, 0x3f, 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xcb, 
                          0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x41, 
               0x04, 0x00, 0x1c, 0x2c , 0x5c, 0xe4, 0x38, 
               0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe3, 0x7b, 
               0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xbf, 
               0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0xd7, 
               0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0x64, 
               0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0x7a, 
               0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x22, 
               0x08, $filesz1, $filesz2); 

echo $binarydata; 

: 나는 같은 구문 분석하는 내 클라이언트 스크립트에 사용할 수 있도록 바이너리 데이터를 처리하고있어 제 의뢰인이 집어 들었습니까? 파이썬 측면에서, I는 FH = StringIO (데이터)의 모든 데이터 I가 MyByte = ORD (fh.read (1))가 가

는 [EDIT] I 단지 시도

같은 바이트를 얻을 읽기 (에코 이전의) 끝에 데이터를 추가하려면 다음과 같이 입력하십시오.

$fh = fopen($file); 
    for ($i=0;$i<filesize($file); $i++) { 
     $binarydata.=pack("C*",fread($fh,1)); 
    } 
    fclose($fh); 

그러나 작동하지 않는 이유는 무엇입니까?

답변

1

데이터 스트림을 출력 중이므로 전체 파일 내용을 직접 에코 할 수없는 이유는 없습니다. 나는 또한 당신이 의도 한 것으로 $ filesz1을 수정했다.

$file = "gw/gateway.py" 
if (file_exists($file)) { 
    $gw_file_sz = filesize($file); 
    $filesz1 = floor($gw_file_sz/256); 
    $filesz2 = $gw_file_sz%256; 
} 
$binarydata = pack("C*", 0x01, $year1, $year2, $day1, $day2, $min1, $min2, $sec, 
    0x00, 0x3f, 0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xcb, 
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x41, 
    0x04, 0x00, 0x1c, 0x2c , 0x5c, 0xe4, 0x38, 
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe3, 0x7b, 
    0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0xbf, 
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0xd7, 
    0x02, 0x00, 0x1c, 0x2c , 0x4c, 0xdf, 0x64, 
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe7, 0x7a, 
    0x02, 0x00, 0x1c, 0x2c , 0x5c, 0xe8, 0x22, 
    0x08, $filesz1, $filesz2); 

echo $binarydata; 
echo file_get_contents($file); 
+0

안녕 JMack, 당신의 응답을 주셔서 감사합니다, 이런 식으로 모든 것을는 file_get_contents를위한 새로운 하나를() 열리지 않습니다, 동일한 스트림에있을 것입니다? – cerr

+0

아니요, 새 스트림을 열면 안됩니다. 모두 하나의 스트림이어야합니다. 이것은'echo $ binarydata.file_get_contents ($ file);'와 동일하다. 이것은 echo하기 전에 모든 데이터로부터 하나의 문자열을 만든다. –