ZSTD_compressBound($len); $comp = str_repeat(' ', $max); $clen = self::$ffi->ZSTD_compress($comp, $max, $src, $len, 6); if (self::$ffi->ZSTD_isError($clen)) { throw new \RuntimeException("Compression fails"); } return substr($comp, 0, $clen); } public static function decompress(string $comp): string { self::init(); $clen = strlen($comp); $max = self::$ffi->ZSTD_decompressBound($comp, $clen); $unco = str_repeat(' ', $max); $ulen = self::$ffi->ZSTD_decompress($unco, $max, $comp, $clen); if (self::$ffi->ZSTD_isError($clen)) { throw new \RuntimeException("Decompression fails"); } return substr($unco, 0, $ulen); } }