拡張機能のインストール
この拡張機能をインストールするには、システムに 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);
ファイル操作関数と同様に、ハンドルを取得するには、まず bzoopen() を通じてファイルを開く必要があります。次に、 bzwrite() を使用してファイルに書き込み、 bzread() を使用してファイルを読み取ります。最後に bzclose() を使用してファイルを閉じます。
ここで注意が必要なのは、ファイルを開く形式である bzopen() の第 2 引数には「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() の 2 番目のパラメーターはオプションのバイト長で、デフォルトは 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() は文字列のエンコードと圧縮に使用されます。2 番目のパラメータは圧縮率で、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() は、それぞれエラー番号とエラー内容を返します。非常にシンプルでわかりやすい3つの機能。
概要
この拡張機能はまだ非常にシンプルですが、最も重要なことは、Bzip2 圧縮ファイルの種類はあまり一般的に使用されていないため、知っている人は知っているかもしれないということです。あまりありません。しかし、この中には、文字列のエンコード機能とデコード機能が備わっており、これら 2 つの機能は、特定のシナリオでは情報暗号化の手段として実際に使用できるという点で、少し驚きました。
テスト コード:
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 ビデオ チュートリアル