perl で ftp サーバのディレクトリメンテナンス

  フレームも CGI



今後の為に、フレームも CGI にしておいて left=cgi名 でフレームに表示するターゲットを引き渡す事にしました

  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

$QueryString = $ENV{'QUERY_STRING'};
@Fields_Data = split(/&/, $QueryString);
foreach $Field_Data ( @Fields_Data ) {
	($Key, $Value) = split(/=/, $Field_Data);
	$Value =~ tr/+/ /;
	$Value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 	$QueryString{$Key} = $Value;
}

print <<FRAME;
<HTML>
<HEAD>
<TITLE>ディレクトリメンテナンス</TITLE>
</HEAD>

<FRAMESET id='TopFrame' cols='230,*' framespacing='1' frameborder='1'>
	<FRAME name='Ctrl' src='$QueryString{left}.cgi'>
	<FRAME name='Act'>
</FRAMESET>
FRAME
  



  初期ディレクトリ一覧



  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

print <<HTML_HEAD;
<HTML>
<BODY>
HTML_HEAD

# **********************************************************
# 処理
# **********************************************************
	$TOP = "../dspdata";

	opendir( DIR, $TOP );
	@file = readdir(DIR);
	closedir( DIR );

	foreach $entry ( sort @file ) {
		next if $entry eq ".";
		next if $entry eq "..";
		next if !(-d "$TOP/$entry");

		print "$entry<br>\n";
	}

print <<HTML_FOOT;
</BODY>
</HTML>
HTML_FOOT
  

正規表現はできるだけ使いません。基本的に、テキストの文字列解析以外に使うと、ソースコードの可読性が落ちるだけで、多くのプログラマにとって、またはこれからプログラマになろうとしている人達にとってメリットがありません。



  クリックすると右フレームに、さらにディレクトリの内容一覧

  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

print <<HTML_HEAD;
<HTML>
<BODY>
HTML_HEAD

# **********************************************************
# 処理
# **********************************************************
	$TOP = "../dspdata";

	opendir( DIR, $TOP );
	@file = readdir(DIR);
	closedir( DIR );

	foreach $entry ( sort @file ) {
		next if $entry eq ".";
		next if $entry eq "..";
		next if !(-d "$TOP/$entry");

		$target = "<A href='subdir.cgi?top=$TOP&target=$entry' target='Act'>";
		$target .= $entry;
		$target .= "</A>";
		print "$target<br>\n";
	}

print <<HTML_FOOT;
</BODY>
</HTML>
HTML_FOOT
  

  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

$QueryString = $ENV{'QUERY_STRING'};
@Fields_Data = split(/&/, $QueryString);
foreach $Field_Data ( @Fields_Data ) {
	($Key, $Value) = split(/=/, $Field_Data);
	$Value =~ tr/+/ /;
	$Value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 	$QueryString{$Key} = $Value;
}

print <<HTML_HEAD;
<HTML>
<BODY>
HTML_HEAD

# **********************************************************
# 処理
# **********************************************************
	$TOP = "$QueryString{'top'}/$QueryString{'target'}";

	opendir( DIR, $TOP );
	@file = readdir(DIR);
	closedir( DIR );

	foreach $entry ( sort @file ) {
		next if $entry eq ".";

		if (-d "$TOP/$entry") {
			print "[$entry]<br>\n";
		}

	}

	foreach $entry ( sort @file ) {
		next if $entry eq ".";
		next if $entry eq "..";

		if ( !(-d "$TOP/$entry") ) {
			print "$entry<br>\n";
		}

	}

print <<HTML_FOOT;
</BODY>
</HTML>
HTML_FOOT
  

ディレクトリ移動用に右側フレームの表示では、.. を表示するようにします



  さらに、ディレクトリ移動

  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

$QueryString = $ENV{'QUERY_STRING'};
@Fields_Data = split(/&/, $QueryString);
foreach $Field_Data ( @Fields_Data ) {
	($Key, $Value) = split(/=/, $Field_Data);
	$Value =~ tr/+/ /;
	$Value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 	$QueryString{$Key} = $Value;
}

print <<HTML_HEAD;
<HTML>
<BODY>
HTML_HEAD

# **********************************************************
# 処理
# **********************************************************
	$TOP = "$QueryString{'top'}/$QueryString{'target'}";

	opendir( DIR, $TOP );
	@file = readdir(DIR);
	closedir( DIR );

	foreach $entry ( sort @file ) {
		next if $entry eq ".";

		if (-d "$TOP/$entry") {
			$target = "<A href='subdir.cgi?top=$TOP&target=$entry'>";
			$target .= $entry;
			$target .= "</A>";
			print "[$target]<br>\n";
		}

	}

	foreach $entry ( sort @file ) {
		next if $entry eq ".";
		next if $entry eq "..";

		if ( !(-d "$TOP/$entry") ) {
			print "$entry<br>\n";
		}

	}

print <<HTML_FOOT;
</BODY>
</HTML>
HTML_FOOT
  



  仕様は省略しますが、いらない最下層ディレクトリを削除

  
#!/usr/local/bin/perl

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

$QueryString = $ENV{'QUERY_STRING'};
@Fields_Data = split(/&/, $QueryString);
foreach $Field_Data ( @Fields_Data ) {
	($Key, $Value) = split(/=/, $Field_Data);
	$Value =~ tr/+/ /;
	$Value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 	$QueryString{$Key} = $Value;
}
if ( $ENV{'REQUEST_METHOD'} eq "POST" ) {
	read(STDIN, $Form, $ENV{'CONTENT_LENGTH'});
	@Fields_Data = split(/&/, $Form);
	close(STDIN);
	foreach $Field_Data ( @Fields_Data ) {
		($Key, $Value) = split(/=/, $Field_Data);
		$Value =~ tr/+/ /;
		$Value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	 	$Form{$Key} = $Value;
	}
}

print <<HTML_HEAD;
<HTML>
<BODY>
<FORM method=post>
HTML_HEAD

# **********************************************************
# 処理
# **********************************************************
	$TOP = "$QueryString{'top'}/$QueryString{'target'}";

	if ( $ENV{'REQUEST_METHOD'} eq "POST" ) {
		$DELDIR = "$TOP/$Form{'send'}";
		opendir( DIR, $DELDIR );
		@file = readdir(DIR);
		closedir( DIR );
		foreach $entry ( @file ) {
			unlink( "$DELDIR/$entry" );
		}
		rmdir($DELDIR);

		$DELTOP = "../data/$QueryString{'target'}";
		$DELDIR = "$DELTOP/$Form{'send'}";
		opendir( DIR, $DELDIR );
		@file = readdir(DIR);
		closedir( DIR );
		foreach $entry ( @file ) {
			unlink( "$DELDIR/$entry" );
		}
		rmdir($DELDIR);
	}

	opendir( DIR, $TOP );
	@file = readdir(DIR);
	closedir( DIR );

	@livefile = ();
	$i = 0;
	foreach $entry ( @file ) {
		next if $entry eq ".";
		next if $entry eq "..";
		next if $entry eq "title.txt";

		if ( !(-d "$TOP/$entry") ) {
			open( FILE, "$TOP/$entry" );
			@line = <FILE>;
			close( FILE );
			$livefile[$i] = substr($line[0],0,12) . ".grp";
			$i++;
		}

	}

	foreach $entry ( sort @file ) {
		next if $entry eq ".";

		if (-d "$TOP/$entry") {
			$live = 0;
			foreach $liveentry ( @livefile ) {
				if ( $entry eq $liveentry ) {
					$live = 1;
					last;
				}
			}
			
			if ( $live || $entry eq ".." ) {
			   $target = "<A href='subdir.cgi?top=$TOP&target=$entry'>";
			   $target .= $entry;
			   $target .= "</A>";
			   print "[$target]<br>\n";
			}
			else {
			   $target = "<INPUT type=submit name=send value='$entry'>";
			   print "[$target]<br>\n";
			}

		}

	}


	print "<hr>";
	while ( ($key,$val) = each %QueryString ) {
		print "$key,$val<br>\n";
	}
	print "<hr>";
	while ( ($key,$val) = each %Form ) {
		print "$key,$val<br>\n";
	}


print <<HTML_FOOT;
</FORM>
</BODY>
</HTML>
HTML_FOOT
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ