私はPHPについてほとんど知らないので、RedHatキックスタートファイルを生成するためのWebベースのツールの作成は学ぶのに良いプロジェクトになると判断しました。特に、ツールはCSVファイルを解析し、そこから取得したデータを含むテーブルを生成します。入力ファイルの形式は次のとおりです。
host1,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、 、/ home、10 、、、 、スワップ、10 、、、 、/ opt、60 、、、 、/ data、30 、、、 、、、、、、 host2,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、 、/ home、10 、、、 、スワップ、10 、、、 、/ opt、60 、、、 、/ data、30 、、、 、、、、、、
テキストの各セクションは、1台のサーバーの情報を表します。フィールドは次のとおりです。
ホスト名、eth0 IP、eth0ネットマスク、eth0ゲートウェイ、eth4 MAC null、eth1 IP、eth1ネットマスク、eth1ゲートウェイ、null 空白、eth2 IP、eth2ネットマスク、eth2ゲートウェイ、null null、パーティション名、GB単位のパーティションサイズ、null、null null、パーティション名、GB単位のパーティションサイズ、null、null null、パーティション名、GB単位のパーティションサイズ、null、null null、パーティション名、GB単位のパーティションサイズ、null、null null、null、null、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 eth0IPeth0ネットマスクeth0ゲートウェイ eth1IPeth1ネットマスクeth1ゲートウェイ eth2IPeth2ネットマスクeth2ゲートウェイ パーティション1パーティション1サイズ パーティション2パーティション2サイズ パーティション3パーティション3サイズ パーティション4パーティション4サイズ host2 eth0IPeth0ネットマスクeth0ゲートウェイ eth1IPeth1ネットマスクeth1ゲートウェイ eth2IPeth2ネットマスクeth2ゲートウェイ パーティション1パーティション1サイズ パーティション2パーティション2サイズ パーティション3パーティション3サイズ パーティション4パーティション4サイズ
これが始まりです。ただし、すべてのサーバーに4つのパーティションがあるわけではありません。いくつかはもっと多く、いくつかは1つか2つ少なくなります。そして、事前にその情報を知らないと、各サーバーのパーティション情報の下に行を追加し、各サーバーを独自のテーブルに分割するという、私がやりたいことの妨げになります。これに沿った何か:
host1 eth0IPeth0ネットマスクeth0ゲートウェイ eth1IPeth1ネットマスクeth1ゲートウェイ eth2IPeth2ネットマスクeth2ゲートウェイ パーティション1パーティション1サイズ パーティション2パーティション2サイズ パーティション3パーティション3サイズ パーティション4パーティション4サイズ パーティション5パーティション5サイズ パーティション6パーティション6サイズ ディスクはいくつですか?[テキストフィールド} host2 eth0IPeth0ネットマスクeth0ゲートウェイ eth1IPeth1ネットマスクeth1ゲートウェイ eth2IPeth2ネットマスクeth2ゲートウェイ パーティション1パーティション1サイズ パーティション2パーティション2サイズ パーティション3パーティション3サイズ パーティション4パーティション4サイズ ディスクはいくつですか?[テキストフィールド}
私の一般的な考えは、CSVファイルのフィールドに、行にパーティション情報が含まれていることを示す必要があるということです。それは最も簡単なアプローチのようです。ただし、入力ファイルの形式を変更する必要がない別の手段があるかどうか疑問に思っています。
また、すべてのnullフィールドを含む行をセクション区切り文字として使用する方法も理解する必要があります。
私がこれにどのようにアプローチできるかについての考えはありがたいです。