Erweiterung installieren
Die Installation dieser Erweiterung erfordert bzip2-devel auf dem System. Wir müssen also zuerst die Unterstützung für dieses Softwarepaket auf dem System installieren und dann wird diese Erweiterung mit dem PHP-Installationspaket veröffentlicht, sodass wir nur PHP kompilieren und den entsprechenden Kompilierungsbefehl in ./configure hinzufügen müssen.
# yum install bzip2-devel # ./configure xxxx --with-bz2 # make && make install
Grundlegende Operationen
Bzip2 bietet nur wenige Funktionen und ist sehr einfach. Das erste, was wir uns ansehen, ist das Speichern einer Zeichenfolge in einer Datei.
$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);
Genau wie bei der Dateioperationsfunktion müssen wir zuerst die Datei über bzopen() öffnen, um das Handle zu erhalten. Verwenden Sie dann bzwrite(), um in die Datei zu schreiben, und bzread(), um die Datei zu lesen. Verwenden Sie abschließend bzclose(), um die Datei zu schließen.
Hier ist zu beachten, dass der zweite Parameter von bzopen(), der die Form angibt, in der die Datei geöffnet wird, nur als „w“ oder „r“ geschrieben werden kann. Es hat keinen anderen Typ und kann nicht gleichzeitig gelesen und geschrieben werden, das heißt, es kann nicht in der Form „wr“ geschrieben werden. Nachdem wir also mit dem Schreiben der Datei fertig sind, müssen wir „r“ verwenden, um die Datei zu öffnen und sie zu lesen.
Einstellung der Leselänge
$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);
Der zweite Parameter von bzread() ist die optionale Bytelänge, der Standardwert ist 1024 und es können maximal 8192 unkomprimierte Bytes gleichzeitig gelesen werden.
String-Kodierung
Die Bzip2-Erweiterung stellt uns auch Funktionen zur Verfügung, um Strings direkt zu kodieren. Es ist nicht erforderlich, es jedes Mal in der Datei zu speichern. Wenn es sich um dieselbe Zeichenfolge handelt, handelt es sich bei der Funktion, die die Zeichenfolgencodierung verwendet, und bei der Inhaltsausgabe in der Datei um denselben verstümmelten Binärinhalt.
$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() wird zum Codieren und Komprimieren von Zeichenfolgen verwendet. Der zweite Parameter ist das Komprimierungsverhältnis und 9 ist die höchste Stufe. Der codierte Inhalt ist nicht-menschlicher binärer Kauderwelsch. bzdecompress() wird verwendet, um codierte Inhalte zu dekodieren. Ich glaube, viele Freunde haben herausgefunden, dass sich damit vertrauliche Inhalte verschlüsselt übertragen lassen. Gleichzeitig können wir im Testcode sehen, dass er normalerweise auch Chinesisch unterstützt.
Fehlermeldung
Abschließend werfen wir einen Blick auf die Fehlerbehandlungsfunktion von 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);
Wir erstellen zunächst eine Fehlerumgebung. Nachdem Sie mit „r“ die Datei geöffnet und das Handle erhalten haben, schreiben Sie in die Datei. bzerror() gibt ein Array von Fehlermeldungen zurück, das die Fehlernummer und den Inhalt der Fehlermeldung enthält. bzerrno() und bzerrstr() geben die Fehlernummer bzw. den Fehlerinhalt zurück. Drei sehr einfache und leicht verständliche Funktionen.
Zusammenfassung
Diese Erweiterung ist immer noch sehr einfach. Das Wichtigste ist, dass der komprimierte Bzip2-Dateityp nicht sehr häufig verwendet wird und daher möglicherweise nicht vielen Leuten bekannt ist. Aber wir fanden immer noch eine kleine Überraschung: Es bietet Funktionen zur Zeichenfolgenkodierung und -dekodierung. Diese beiden Funktionen können in bestimmten Szenarien tatsächlich als Mittel zur Informationsverschlüsselung verwendet werden.
Testcode:
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
Empfohlenes Lernen: php-Video-Tutorial