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

LAN配置表单提交成功但无法更新/etc/network/interfaces文件求助

问题诊断与解决方案

1. 首要问题:表单提交目标错误

你的HTML表单指定的提交目标是nm.php,但实际处理配置更新的脚本是lanconf.php,导致表单提交后根本没有执行更新逻辑。

修正方法:修改表单的action属性为正确的脚本路径:

<form method="POST" action="lanconf.php">

2. 正则表达式匹配失效

原正则无法正确捕获接口的完整配置段,核心问题:

  • 未启用DOTALL模式(s修饰符),.默认不匹配换行符,导致.*?无法跨行读取接口配置内容
  • 匹配范围错误,原模式仅覆盖auto $selectedInterface到iface $selectedInterface之间的内容,无法完整覆盖整个接口的配置项

修正后的正则:

// 匹配从auto指令开始,到下一个auto指令或文件结尾的完整接口段
$pattern = "/auto $selectedInterface\s*(.*?)(?=\nauto|\z)/s";

正则说明:

  • \s*:匹配auto eth0后的任意空白字符(换行、空格)
  • (.*?):非贪婪匹配所有内容(因s修饰符可跨换行)
  • (?=\nauto|\z):正向预查,确保只匹配当前接口的配置段,不会影响其他接口

3. 添加错误处理逻辑

原代码未检查文件读写操作是否成功,即使操作失败仍会显示“保存成功”的提示,导致无法排查问题。

添加错误判断:

// 读取文件时检查
$content = file_get_contents($filename);
if ($content === false) {
    die("无法读取配置文件,请检查权限");
}

// 写入文件时检查
$result = file_put_contents($filename, $content);
if ($result === false) {
    die("无法写入配置文件,请检查权限");
}

4. 最终修正后的lanconf.php代码

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取表单数据
    $selectedInterface = $_POST['interface'];
    $ip = $_POST['ip_address'];
    $gateway = $_POST['gateway'];
    $dns = $_POST['dns_servers'];

    // 读取配置文件
    $filename = '/etc/network/interfaces';
    $content = file_get_contents($filename);
    
    if ($content === false) {
        die("无法读取配置文件,请检查文件权限");
    }

    // 匹配目标接口的完整配置段
    $pattern = "/auto $selectedInterface\s*(.*?)(?=\nauto|\z)/s";

    // 生成新的配置内容
    $newConfig = "auto $selectedInterface\n";
    $newConfig .= "iface $selectedInterface inet static\n";
    $newConfig .= "    address $ip\n";
    $newConfig .= "    gateway $gateway\n";
    $newConfig .= "    dns-nameservers $dns\n";

    // 替换旧配置
    $content = preg_replace($pattern, $newConfig, $content);

    // 写入更新后的配置
    $result = file_put_contents($filename, $content);
    
    if ($result === false) {
        die("无法写入配置文件,请检查文件权限");
    }

    echo "Configuration for $selectedInterface has been updated.";
    echo '<div id="message" style="display: block; color: green;">Configuration saved successfully!</div>';
} else {
    echo "Please fill out the form and submit it.";
}
?>

5. 权限确认(可选)

确保PHP运行用户(通常为www-data)对/etc/network/interfaces有写入权限:

sudo chown www-data:www-data /etc/network/interfaces
sudo chmod u+w /etc/network/interfaces

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:32:38