ホームページ >バックエンド開発 >PHPの問題 >PHPでbz2圧縮拡張ツールを使用する方法

PHPでbz2圧縮拡張ツールを使用する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-03 17:36:402744ブラウズ

この記事では、PHP で圧縮拡張ツール bz2 を使用する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでbz2圧縮拡張ツールを使用する方法

日々の開発やコンピューターの使用では、圧縮や解凍のためのツールに触れることがよくありますが、PHP には関連する操作拡張パッケージも数多く用意されています。一部の圧縮および解凍機能を便利に操作できる直接利用可能な関数があります。今日は、最初に、より単純ではあるがあまり使用されていない圧縮形式、Bzip2 について学習します。

拡張機能のインストール

この拡張機能をインストールするには、システムに 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 ビデオ チュートリアル

以上がPHPでbz2圧縮拡張ツールを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。