You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找Linux /usr/bin/xz的Windows替代工具(支持LZMA1参数配置)

替代Linux xz工具的Windows方案(支持LZMA1配置)

方案1:使用7-Zip命令行工具(7z.exe)

7-Zip的命令行版本完全支持LZMA1压缩,可配置对应的lc/lp/pb/dict参数,适配Windows环境。

操作步骤:

  1. 下载Windows版7-Zip,安装后找到7z.exe(默认路径如C:\Program Files\7-Zip\7z.exe)
  2. 替换原proc_open调用的命令,参数对应关系如下:
    • Linux xz的--format=raw对应7z的-txz+-mm=LZMA1
    • --lzma1=lc=3,lp=0,pb=2,dict=128KiB对应7z的-md=128k -mlc=3 -mlp=0 -mpb=2
    • -c -(从stdin读、stdout写)对应7z的-si(读自标准输入)+-so(写到标准输出)+a -(输出到stdout)

替换后的PHP代码:

$x = proc_open(
    '"C:\Program Files\7-Zip\7z.exe" a -txz -mm=LZMA1 -md=128k -mlc=3 -mlp=0 -mpb=2 -si -so -',
    [0 => ["pipe", "r"], 1 => ["pipe", "w"]],
    $p
);

方案2:使用PHP LZMA扩展(liblzma)

若可安装PHP扩展,直接用官方liblzma扩展(PHP 7.3+支持),无需外部工具,性能更优。

操作步骤:

  1. 下载对应PHP 8.1 x64 Windows版本的php_lzma.dll,放入PHP的ext目录,修改php.ini添加extension=lzma
  2. 用lzma_encode函数实现对应配置:
// 匹配原参数:lc=3, lp=0, pb=2, dict=128KiB
$options = [
    'mode' => LZMA_MODE_COMPRESS,
    'dict_size' => 128 * 1024,
    'lc' => 3,
    'lp' => 0,
    'pb' => 2,
    'flags' => LZMA_FMT_RAW // 对应--format=raw
];

// 模拟原代码的管道输入输出逻辑
$input = stream_get_contents(STDIN);
$compressed = lzma_encode($input, $options);
echo $compressed;

若需保留proc_open管道模式,可将上述逻辑封装为单独PHP脚本后调用,但直接用扩展效率更高。

方案3:纯PHP实现的LZMA库

若无法安装扩展,可选用纯PHP的LZMA实现(无需外部依赖),适合小数据量场景。

操作示例:

// 假设已引入纯PHP的LZMA压缩类
$lzma = new LZMACompressor();
// 配置对应参数
$lzma->setDictionarySize(128 * 1024);
$lzma->setLiteralContextBits(3);
$lzma->setLiteralPositionBits(0);
$lzma->setPositionBits(2);

// 处理输入输出
$input = stream_get_contents(STDIN);
$compressed = $lzma->compress($input, true); // true表示raw格式输出
echo $compressed;

内容的提问来源于stack exchange,提问作者theoneiam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:31:09