PHP에서, 이진 데이터를 처리 할 때 pack () 함수와 file_put_contents () 함수의 조합은 매우 실용적입니다. Pack ()는 지정된 형식의 이진 문자열로 데이터를 변환 할 수 있으며 File_put_Contents ()는 이러한 바이너리 데이터를 파일에 쓸 책임이 있습니다. 이 기사는이 두 기능을 사용하여 구조화 된 데이터를 이진 파일에 작성하는 방법을 자세히 설명합니다.
pack () 함수는 변수를 형식 코드에 따라 이진 문자열로 변환합니다. 다음과 같은 다양한 형식 코드를 지원합니다.
C : 서명 된 캐릭터 (1 바이트)
C : 서명되지 않은 문자 (1 바이트)
S : 서명 된 짧은 정수 (2 바이트)
S : 서명되지 않은 짧은 정수 (2 바이트)
I : 서명 된 정수 (4 바이트)
I : 서명되지 않은 정수 (4 바이트)
F : 부동 소수점 번호 (4 바이트)
D : 이중 정밀 플로팅 포인트 번호 (8 바이트)
더 많은 형식은 공식 PHP 문서를 참조하십시오.
file_put_contents () 함수는 파일에 문자열을 쓰는 데 사용됩니다. 파일 컨텐츠는 기본적으로 덮어 쓰거나 추가 모드로 설정할 수 있습니다.
ID (4 바이트 정수), 상태 (1 바이트 문자), 부동 소수점 값 (4 바이트 부동 소수점 번호)이 포함 된 데이터 구조를 작성한다고 가정 해 봅시다.
<?php
// 데이터 준비
$id = 123456; // 정수
$status = 1; // 상태,1字节无符号정수
$value = 3.14159; // 부동 소수점 번호
// 사용 pack() 형식별로 데이터를 포장하십시오
// 형식 설명:I - 서명되지 않은 정수,C - 서명되지 않은 캐릭터,f - 부동 소수점 번호
$binaryData = pack('ICf', $id, $status, $value);
// 이진 파일에 쓰십시오
file_put_contents('data.bin', $binaryData);
echo "数据已이진 파일에 쓰십시오。\n";
?>
위 코드를 실행 한 후에는 Data.Bin 이라는 파일이 현재 디렉토리에서 생성되며 파일 내용은 해당 바이너리 데이터입니다.
쓰기가 성공했는지 확인하기 위해 File_get_Contents ()를 사용하여 파일 내용을 읽고 unpack () 로 구문 분석 할 수 있습니다.
<?php
// 이진 파일을 읽으십시오
$data = file_get_contents('data.bin');
// 데이터 포장 풀기
// 형식은 쓰기 시간과 일치해야합니다
$result = unpack('Iid/Cstatus/fvalue', $data);
print_r($result);
?>
출력 결과는 다음과 같습니다.
Array
(
[id] => 123456
[status] => 1
[value] => 3.14159
)
바이트 순서 : pack ()는 기본적으로 기계 바이트 순서를 사용합니다. 플랫폼이나 네트워크에서 전송되는 경우 바이트 주문 형식을 지정하는 것이 좋습니다 (예 : N 은 네트워크 바이트 주문 Unsigned Integer).
형식 일치 : pack () 및 unpack () 의 형식은 하나씩 일치해야합니다. 그렇지 않으면 오류가 구문 분석됩니다.
파일 권한 : 파일을 작성할 때 PHP에 대상 폴더를 작동하기에 충분한 권한이 있는지 확인하십시오.