현재 위치: > 최신 기사 목록> Pack () 및 file_put_contents ()를 사용하여 이진 파일에 씁니다

Pack () 및 file_put_contents ()를 사용하여 이진 파일에 씁니다

M66 2025-06-03

PHP에서, 이진 데이터를 처리 할 때 pack () 함수와 file_put_contents () 함수의 조합은 매우 실용적입니다. Pack ()는 지정된 형식의 이진 문자열로 데이터를 변환 할 수 있으며 File_put_Contents ()는 이러한 바이너리 데이터를 파일에 쓸 책임이 있습니다. 이 기사는이 두 기능을 사용하여 구조화 된 데이터를 이진 파일에 작성하는 방법을 자세히 설명합니다.

1. pack () 함수 소개

pack () 함수는 변수를 형식 코드에 따라 이진 문자열로 변환합니다. 다음과 같은 다양한 형식 코드를 지원합니다.

  • C : 서명 된 캐릭터 (1 바이트)

  • C : 서명되지 않은 문자 (1 바이트)

  • S : 서명 된 짧은 정수 (2 바이트)

  • S : 서명되지 않은 짧은 정수 (2 바이트)

  • I : 서명 된 정수 (4 바이트)

  • I : 서명되지 않은 정수 (4 바이트)

  • F : 부동 소수점 번호 (4 바이트)

  • D : 이중 정밀 플로팅 포인트 번호 (8 바이트)

더 많은 형식은 공식 PHP 문서를 참조하십시오.

2. file_put_contents () 함수 소개

file_put_contents () 함수는 파일에 문자열을 쓰는 데 사용됩니다. 파일 컨텐츠는 기본적으로 덮어 쓰거나 추가 모드로 설정할 수 있습니다.

3. 샘플 코드 : 구조화 된 데이터를 이진 파일에 쓰십시오

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 이라는 파일이 현재 디렉토리에서 생성되며 파일 내용은 해당 바이너리 데이터입니다.

4. 이진 파일을 읽는 예

쓰기가 성공했는지 확인하기 위해 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
)

5. 주목할만한 것들

  1. 바이트 순서 : pack ()는 기본적으로 기계 바이트 순서를 사용합니다. 플랫폼이나 네트워크에서 전송되는 경우 바이트 주문 형식을 지정하는 것이 좋습니다 (예 : N 은 네트워크 바이트 주문 Unsigned Integer).

  2. 형식 일치 : pack ()unpack () 의 ​​형식은 하나씩 일치해야합니다. 그렇지 않으면 오류가 구문 분석됩니다.

  3. 파일 권한 : 파일을 작성할 때 PHP에 대상 폴더를 작동하기에 충분한 권한이 있는지 확인하십시오.