[PR]今日のニュースは
「Infoseek モバイル」

iswebでCGI:ファイルを読む

ファイルの内容を出力するCGIです。
ローカルなファイルの読み書きができるわけですが、ここでは、 自分自身を open して read し、読んだデータを16進数でダンプしています。

動作例

ここを押すと、実行結果がわかります。↓
/cgi-bin/fread.cgi

ソースコード

open して、ひたすら read します。
read したデータを、unpack で数値に変換し、テーブルで表示しています。

#!/usr/local/bin/perl
use CGI;
use strict;

my $FILENAME = "fread.cgi";

my $cgi = new CGI;
print $cgi->header, $cgi->start_html('Hex Dump');
print $cgi->h1("Dump of $FILENAME</h1>");
print "<p><table>\n<tr><th> 0</th>";
my ($i, $j);
for($i=1; $i<16; $i++) {
	printf("<th>+%x</th>", $i);
}
print "<td>&nbsp;|&nbsp;</td></tr>\n";

my $dat;
if(open(DAT, $FILENAME)) {
	while(read(DAT, $dat, 256) > 0) {
		my @d = unpack('C*', $dat);
		for($i=0; $i<=$#d; $i+=16) {
			print "<tr>";
			for($j=0; $j<16 && $i+$j<=$#d; $j++) {
				printf("<td>%02x</td>", $d[$i+$j]);
			}
			print "<td></td>" x (16-$j) .
				"<td align=\"center\">|</td>";
			for($j=0; $j<16 && $i+$j<=$#d; $j++) {
				print "<td>";
				if($d[$i+$j] >= 0x20 && $d[$i+$j] < 0x7f) {
					print $cgi->escapeHTML(
						pack('C', $d[$i+$j]));
				} else {
					print ".";
				}
				print "</td>";
			}
			print "</tr>\n";
		}
	}
	close DAT;
}

print "</table></p>\n";
print $cgi->end_html;

▼ トップ

▼ プロフィール

▼ 個人的宣伝

LINUXサーバーインストール(FedoraCore4)
Oracle10gのバックアップを本気で理解し実践
FC4 や Oracle のインストールの仕方〜管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
いますぐ実践!Linuxシステム管理
システム管理初心者の方を対象に、システム管理のノウハウをお知らせします。
栗日記
毎日栗の絵を描いています。
退屈なとき、癒されたいときなどに、ご覧ください。:-)