39、PHP 原生魅力 - 字符串 - 压缩字符串 & 解压缩字符串
压缩内容:gzcompress()
如果你有一些字符串格式的内容,你可以尝试压缩它来保存空间(以字节为单位)。
例如,在执行序列化数组或大对象之后,你可能希望压缩获得的字符串以节省保存空间。
让我们试着这样做:
- 定义一个数组
- 将数组序列化为字符串
- 压缩字符串
在序列化和压缩后,你可以检查字符串的大小,你会发现你可以节省保存 50% 的空间。
<?php
$array = [
['product' => 'Desk', 'price' => 200],
['product' => 'Chair', 'price' => 100],
['product' => 'Bookcase', 'price' => 150],
['product' => 'Door', 'price' => 100],
];
$string = serialize($array);
echo '序列化之后的大小:' . strlen($string) . PHP_EOL;
echo '压缩之后的大小:' . strlen(gzcompress($string)) . PHP_EOL;
输出如下:
$ php 39-gzcompress.php
序列化之后的大小:223
压缩之后的大小:106
可以设置压缩级别,从 0 到 9。
0 表示不压缩,9 表示最大压缩(较慢),默认值为 6。
解压缩字符串:gzuncompress()
要解压缩之前使用 gzcompress()
压缩的内容字符串,您可以使用 gzuncompress()
函数。
<?php
$array = [
['product' => 'Desk', 'price' => 200],
['product' => 'Chair', 'price' => 100],
['product' => 'Bookcase', 'price' => 150],
['product' => 'Door', 'price' => 100],
];
$string = serialize($array);
$compressed = gzcompress($string);
echo '序列化之后的大小:' . strlen($string) . PHP_EOL;
echo '压缩之后的大小:' . strlen(gzcompress($compressed)) . PHP_EOL;
// UNCOMPRESS,压缩字符串
$serialized = gzuncompress($compressed);
// UNSERIALIZE,获取初始数组
print_r(unserialize($serialized));
输出如下:
$ php 39-gzcompress.php
序列化之后的大小:223
压缩之后的大小:117
Array
(
[0] => Array
(
[product] => Desk
[price] => 200
)
[1] => Array
(
[product] => Chair
[price] => 100
)
[2] => Array
(
[product] => Bookcase
[price] => 150
)
[3] => Array
(
[product] => Door
[price] => 100
)
)
请登录后再评论