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

PHP中捕获7z解压错误:检测密码错误并触发通知

PHP调用7z解压时捕获密码错误并发送通知

要实现捕获7z解压的密码错误并通知管理员,你需要改造现有代码,改用能捕获命令输出和退出状态的函数,同时利用7z的错误特征来判断:

核心改造思路

  1. 替换system()为exec(),这样可以捕获命令的输出内容和退出状态码
  2. 用escapeshellarg()转义所有外部参数,避免命令注入风险
  3. 7z密码错误时,退出码通常为2,且输出中会包含ERROR: Wrong password--,通过这两个特征判断密码错误
  4. 触发密码错误时,调用mail()函数发送通知邮件

完整代码示例

$zippath = '/filepath/name.zip';
$password = 'current_password';
$targetFile = 'file.name';

// 转义参数,避免命令注入
$safeZippath = escapeshellarg($zippath);
$safePassword = escapeshellarg($password);
$safeTargetFile = escapeshellarg($targetFile);

// 构造7z命令,-bsp1确保错误信息输出到标准输出
$command = "7z e $safeZippath -p$safePassword $safeTargetFile -bsp1";

// 捕获命令输出和退出状态
exec($command, $outputLines, $exitCode);
$fullOutput = implode(PHP_EOL, $outputLines);

// 判断是否为密码错误
$isBadPassword = ($exitCode === 2) && str_contains($fullOutput, 'ERROR: Wrong password--');

if ($isBadPassword) {
    // 发送通知邮件
    $to = 'admin@yourdomain.com';
    $subject = '[紧急] 解压密码失效,请更新';
    $message = "尝试解压文件 {$zippath} 时检测到密码错误,请及时更新密码。\n\n错误详情:\n{$fullOutput}";
    $headers = "From: system-notice@yourdomain.com\r\n" .
               "X-Mailer: PHP/" . phpversion();

    // 发送邮件(注意:需要确保PHP的mail函数已正确配置)
    mail($to, $subject, $message, $headers);
}

注意事项

  • 命令注入防护:必须用escapeshellarg()处理所有来自外部的变量(比如$zippath、$password),防止恶意构造的参数执行危险命令
  • 错误输出捕获:添加-bsp1参数可以让7z将错误信息输出到标准输出流,确保exec()能捕获到完整的错误内容
  • 双重判断:同时检查退出码和错误字符串,避免因其他类型的错误(如文件损坏)误触发通知

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:15