2014-10-30 4 views
0

제한된 메모리를 가진 간단한 miro-controller가있는 임베디드 장치를 개발 중입니다. 이 장치는 HTTP (또는 HTTPS) GET 메서드 요청을 서버에 보내 서버에 파일을 요청합니다. 파일을 보낼 책임이있는 서버에 PHP 스크립트가 있습니다. 이제 PHP 스크립트는 파일을 임베디드 장치로만 계속 보냅니다. 그러나 임베디드 장치가 빠르지 않고 처리하기 전에 전체 파일을 저장할 메모리가 충분하지 않기 때문에. PHP 스크립트가 각 HTTP GET 요청에서 파일 청크 만 보내도록합니다. 청크의 크기는 GET 요청의 변수에 의해 결정되는 것이 좋다고 생각합니다. 그리고 각 청크에는 해당 청크의 크기, 시퀀스 번호 및 CRC 검사를 설명하는 헤더가 추가됩니다.PHP의 서버에서 Chunk의 파일 보내기

나는 PHP 스크립트의 초보자입니다. PHP 스크립트 작성에 도움을 줄 수 있습니까? 예를 들어 정말 고맙게 생각합니다.

대단히 감사합니다.

+0

http://en.wikipedia.org/wiki/Byte_serving –

답변

1

나는 스크립트 PHP 파일을 읽고 원하는 덩어리를 취할 수 있다고 생각 : 마지막에서

$filename = "YOURFILE.txt"; 
$chunk_length = 1024; // 1024 chars will be sent 
$sequence_number = $_GET['sequence']; 
if ($sequence_number>0){ 
    $position = $sequence_number * $chunk_length; 
} 
else { 
    $position = 0; 
} 
$content = file_get_contents($filename); 
$data = substr($content, $position, $chunk_length); 
header('size:'.strlen($data)); 
header('sequence_number:'.sequence_number); 
header('CRC:'.crc32($data)); 
echo $data; 
+0

내가 그것을 작동하게 .. 그러나 내 장치가 사용자 지정 HTTP 헤더를 읽을 수 없다는 것을 알았습니다. $ 데이터의 끝 부분에있는 각 청크의 CRC를 어떻게 추가하여 HTTP 내용으로 읽을 수 있습니까? – eepty

+1

데이터를 연결해야합니다. crc32가 정수를 반환하고 길이가 변경 될 수있는 문자열이기 때문에 데이터에 포함되지 않을 분리 기호 문자열을 사용하는 것이 좋습니다. 예 : echo $ data. "|||".crc32 ($ data); – Serpes

관련 문제