Installing the extension
The installation of this extension requires bzip2-devel on the system. So we need to install support for this software package on the system first, and then this extension is released with the PHP installation package, so we only need to compile PHP and add the corresponding compilation command in ./configure.
# yum install bzip2-devel # ./configure xxxx --with-bz2 # make && make install
Basic operations
Bzip2 provides few functions and is very simple. The first thing we look at is saving a string to a file.
$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);
Just like the file operation function, we need to first open the file through bzopen() to obtain the handle. Then use bzwrite() to write to the file, and bzread() to read the file. Finally use bzclose() to close the file.
What needs to be noted here is that the second parameter of bzopen(), which is the form of file opening, can only be written as "w" or "r". It has no other type, and cannot be read and written at the same time, that is, it cannot be written in the form "wr". So after we finish writing the file, we have to use "r" to open the file to read it.
Read length setting
$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);
The second parameter of bzread() is the optional byte length, the default is 1024, and a maximum of 8192 uncompressed bytes can be read at one time.
String encoding
The Bzip2 extension also provides us with functions for encoding strings directly. There is no need to save it to the file every time. If it is the same string, the function using string encoding and the content output to the file will be the same garbled binary content.
$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() is used to encode and compress strings. The second parameter is the compression ratio, and 9 is the highest level. The encoded content is non-human binary gibberish. bzdecompress() is used to decode encoded content. I believe many friends have discovered that this can be used for encrypted transmission of confidential content. At the same time, in the test code, we can see that it also supports Chinese normally.
Error message
Finally, let’s take a look at Bzip2’s error handling function.
$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);
We first constructed an error environment. After using "r" to open the file and obtain the handle, write to the file. bzerror() will return an array of error messages, which contains the error number and error message content. bzerrno() and bzerrstr() return the error number and error content respectively. Three very simple and easy-to-understand functions.
Summary
This extension is still very simple. The most important thing is that the Bzip2 compressed file type is not a very commonly used type, so people who may know it do not not much. But we still found a little surprise in it, that is, it provides string encoding and decoding functions. These two functions can indeed be used as a means of information encryption in certain scenarios.
Test code:
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
Recommended learning: php video tutorial