【发布时间】:2012-10-30 21:38:14
【问题描述】:
我对 PHP 知之甚少,因此决定创建一个用于生成 Red Hat kickstart 文件的基于 Web 的工具将是一个很好的学习项目。除其他外,该工具将解析 CSV 文件并生成包含从中获取的数据的表格。输入文件格式如下:
主机1,10.153.196.248,255.255.255.0,10.153.196.1,00:50:56:ac:69:cb ,10.153.157.113,255.255.255.128,10.153.157.1, ,10.153.157.241,255.255.255.128,10.153.157.129, ,/家,10,,, ,交换,10,,, ,/opt,60,,, ,/数据,30,,, ,,,,, 主机2,10.153.155.124,255.255.255.128,10.153.155.1,00:50:56:ac:69:ce ,10.153.157.114,255.255.255.128,10.153.157.1, ,10.153.157.242,255.255.255.128,10.153.157.129, ,/家,10,,, ,交换,10,,, ,/opt,60,,, ,/数据,30,,, ,,,,,每个文本部分代表一个服务器的信息。字段如下:
主机名、eth0 IP、eth0 网络掩码、eth0 网关、eth4 MAC 空,eth1 IP,eth1 网络掩码,eth1 网关,空 空白,eth2 IP,eth2 网络掩码,eth2 网关,空 null,分区名称,分区大小(GB),null,null null,分区名称,分区大小(GB),null,null null,分区名称,分区大小(GB),null,null null,分区名称,分区大小(GB),null,null 空,空,空,空,空目前,我可以解析它并生成一个表格,输入文件中的每一行都是表格中的一行。处理这个的函数:
function processFile($workFile) {
if (file_exists($workFile)) {
print '<table>';
$fh = fopen("$workFile", 'rb');
if ($fh) {
for ($line = fgets($fh); !feof($fh); $line = fgets($fh)) {
$line = trim($line);
$info = explode(',', $line);
print '<tr><td>' . $info[0] . '</td><td>' . $info[1] . '</td><td>' . $info[2] . '</td><td>' . $info[3] . '</td></tr>';
}
} else {
print "Failed to open $workFile";
}
print '</table>';
} else {
print "File $workFile does not exist";
}
}
生成:
host1 eth0 IP eth0 网络掩码 eth0 网关 eth1 IP eth1 网络掩码 eth1 网关 eth2 IP eth2 网络掩码 eth2 网关 分区 1 分区 1 大小 分区 2 分区 2 大小 分区 3 分区 3 大小 分区 4 分区 4 大小 host2 eth0 IP eth0 网络掩码 eth0 网关 eth1 IP eth1 网络掩码 eth1 网关 eth2 IP eth2 网络掩码 eth2 网关 分区 1 分区 1 大小 分区 2 分区 2 大小 分区 3 分区 3 大小 分区 4 分区 4 大小这是一个开始。然而,并不是每台服务器都会有四个分区。有些人会有更多,有些人会少一两个。并且不提前知道这些信息会阻碍我想要做的事情,即在每个服务器的分区信息下方添加一行,并可能将每个服务器分解成自己的表。类似这样的东西:
host1 eth0 IP eth0 网络掩码 eth0 网关 eth1 IP eth1 网络掩码 eth1 网关 eth2 IP eth2 网络掩码 eth2 网关 分区 1 分区 1 大小 分区 2 分区 2 大小 分区 3 分区 3 大小 分区 4 分区 4 大小 分区 5 分区 5 大小 分区 6 分区 6 大小 多少个磁盘? [文本域} host2 eth0 IP eth0 网络掩码 eth0 网关 eth1 IP eth1 网络掩码 eth1 网关 eth2 IP eth2 网络掩码 eth2 网关 分区 1 分区 1 大小 分区 2 分区 2 大小 分区 3 分区 3 大小 分区 4 分区 4 大小 多少个磁盘? [文本域}我的普遍想法是,我必须在 CSV 文件中有一个字段来指示该行包含分区信息。这似乎是最简单的方法。不过,我想知道是否还有其他方法可以使用,不需要更改输入文件的格式。
我还必须弄清楚如何使用包含所有空字段的行作为节分隔符。
任何关于我如何解决此问题的想法将不胜感激。
【问题讨论】:
-
为什么不使用 mysql 数据库呢?
-
可能是从其他来源导入数据
-
该工具的目的是获取一个从现有电子表格创建的 CSV 文件,并使用它来生成 kickstart 文件。生成文件后,不需要 CSV。它可能会出于考古目的而保留,但除此之外,以数据库形式存在的持久性是多余的。如果 CSV 丢失,如果再次需要它,可以从电子表格中重新创建它,这种可能性很小。