확장 설치
이 확장을 설치하려면 시스템에 bzip2-devel이 필요합니다. 따라서 먼저 시스템에 이 소프트웨어 패키지에 대한 지원을 설치한 다음 이 확장이 PHP 설치 패키지와 함께 릴리스되므로 PHP를 컴파일하고 ./configure에 해당 컴파일 명령을 추가하기만 하면 됩니다.
# yum install bzip2-devel # ./configure xxxx --with-bz2 # make && make install
기본 작업
Bzip2는 몇 가지 기능을 제공하며 매우 간단합니다. 가장 먼저 살펴보는 것은 문자열을 파일에 저장하는 것입니다.
$bz = bzopen('/tmp/test.bz', 'w'); // -rw-r--r-- 1 root root 14 Jun 28 09:51 test.bz $text = "This is Bz Compress"; bzwrite($bz, $text); // -rw-r--r-- 1 root root 59 Jun 28 09:53 test.bz bzclose($bz); $bz = bzopen('/tmp/test.bz', 'r'); $v = bzread($bz); echo $v, PHP_EOL; // This is Bz Compress bzclose($bz);
파일 작업 함수와 마찬가지로 먼저 bzopen()을 통해 파일을 열어 핸들을 얻어야 합니다. 그런 다음 bzwrite()를 사용하여 파일에 쓰고 bzread()를 사용하여 파일을 읽습니다. 마지막으로 bzclose()를 사용하여 파일을 닫습니다.
여기서 주목해야 할 점은 파일을 여는 형식인 bzopen()의 두 번째 매개변수는 "w" 또는 "r"로만 쓸 수 있다는 점입니다. 다른 유형이 없으며 동시에 읽고 쓸 수 없습니다. 즉, "wr" 형식으로 쓸 수 없습니다. 따라서 파일 쓰기를 마친 후에는 "r"을 사용하여 파일을 열어서 읽어야 합니다.
읽기 길이 설정
$bz = bzopen('/tmp/test.bz', 'r'); $v = bzread($bz, 10); echo $v, PHP_EOL; // This is Bz $v = bzread($bz); echo $v, PHP_EOL; // Compress bzclose($bz);
bzread()의 두 번째 매개변수는 선택적 바이트 길이이며 기본값은 1024이며, 한 번에 최대 8192개의 압축되지 않은 바이트를 읽을 수 있습니다.
문자열 인코딩
Bzip2 확장은 문자열을 직접 인코딩하는 기능도 제공합니다. 매번 파일에 저장할 필요는 없습니다. 동일한 문자열이면 문자열 인코딩을 사용하는 함수와 파일에 출력되는 내용은 동일한 왜곡된 바이너리 내용이 됩니다.
$str = "Test compress String"; $bzstr = bzcompress($str, 9); echo $bzstr, PHP_EOL; // BZh91AY&SY��J���@ // // �� 1 // df����2�h>.�p�!��// $newStr = bzdecompress($bzstr); echo $newStr, PHP_EOL; $chineseStr = "测试"; $bzstr = bzcompress($chineseStr, 9); echo bzdecompress($bzstr), PHP_EOL;
bzcompress()는 문자열을 인코딩하고 압축하는 데 사용됩니다. 두 번째 매개변수는 압축 비율이며 9가 가장 높은 수준입니다. 인코딩된 콘텐츠는 인간이 아닌 바이너리 횡설수설입니다. bzdecompress()는 인코딩된 콘텐츠를 디코딩하는 데 사용됩니다. 나는 이것이 기밀 콘텐츠의 암호화된 전송에 사용될 수 있다는 것을 많은 친구들이 발견했다고 믿습니다. 동시에, 테스트 코드에서는 중국어도 정상적으로 지원하는 것을 확인할 수 있습니다.
오류 메시지
마지막으로 Bzip2의 오류 처리 기능을 살펴보겠습니다.
$bz = bzopen('/tmp/test.bz', 'r'); bzwrite($bz, 'aaa'); print_r(bzerror($bz)); // Array // ( // [errno] => -1 // [errstr] => SEQUENCE_ERROR // ) echo bzerrno($bz), PHP_EOL; // -1 echo bzerrstr($bz), PHP_EOL; // SEQUENCE_ERROR bzclose($bz);
먼저 오류 환경을 구축합니다. "r"을 사용하여 파일을 열고 핸들을 얻은 후 파일에 씁니다. bzerror()는 오류 번호와 오류 메시지 내용이 포함된 오류 메시지 배열을 반환합니다. bzerrno() 및 bzerrstr()은 각각 오류 번호와 오류 내용을 반환합니다. 매우 간단하고 이해하기 쉬운 세 가지 기능.
요약
이 확장자는 여전히 매우 간단합니다. 가장 중요한 것은 Bzip2 압축 파일 형식은 일반적으로 사용되는 형식이 아니기 때문에 많은 사람들이 알지 못할 수도 있다는 것입니다. 그러나 우리는 여기서 약간의 놀라움을 발견했습니다. 즉, 이 두 기능은 실제로 특정 시나리오에서 정보 암호화 수단으로 사용될 수 있다는 것입니다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/PHP%E7%9A%84Bzip2%E5%8E%8B%E7%BC%A9%E6%89%A9%E5%B1%95%E5%B7%A5%E5%85%B7.php
추천 학습: php 비디오 튜토리얼