Что-то с заголовками. Раньше прекрасно работало, а теперь "Premature end of script headers: script_name.pl" (апач - [error] [client IP] Premature end of script headers: script_name.pl)
- права 755 пробовал играться с кодировками, (print "Content-type:text/html\n\n"; Content-Type: text/html; charset=ISO-8859-1 ) не помогает.
| Код | #!/usr/bin/perl
use GD; use CGI::Cookie; use Digest::MD5; use imageconf;
$image_files = "itemplates"; $login = "$image_files/login.htm"; $index = "$image_files/index.htm"; $resize = "$image_files/resize.htm"; $resizecontinue = "$image_files/resizecontinue.htm"; $transfer = "$image_files/transfer.htm";
$CONVERT_LIMIT = 300;
&main;
sub err { print $_[0]; exit(0); }
sub loadtemplate { my $myfile = $_[0]; open (FILE, "$myfile") or &err("Error: $myfile file not opened"); while(<FILE>) { while (/\$value\((.*?)\)/) { my $inside = $1; $inside =~ s/[\n\t\s\"\']//g; if ($inside =~/,/) { my @funcs = split(/,/,$inside);
if ($FORM{$funcs[0]} eq $funcs[1]) { s/\$value\((.*?)\)/value="$funcs[1]" $funcs[2]/; } else { s/\$value\((.*?)\)/value="$funcs[1]"/; } } else { s/\$value\((.*?)\)/name="$inside" value="$FORM{$inside}"/; } }
my $backup = $_; s/\$([qwertyuiopasdfghjklzxcvbnm]\w*)/&html_secure($FORM{$1},$1)/gies; $html .= $_;
$backup =~ s/\$([qwertyuiopasdfghjklzxcvbnm]\w*)/&html_secure($FORM{$1},$1)/gies; $text .=$backup; } close(FILE); }
sub html_secure { if (($_[1] ne "zipfilesoptions") && ($_[1] ne "goon")){ $_[0] =~s/</</g; $_[0] =~s/>/>/g; } return $_[0]; }
sub outputhtml { print $html; exit(0); }
sub getpassword { my ($password_file) = @_;
if (!open (FILE, $password_file)) { print "Content-type: text/html\n\n"; &err("Error: $myfile file not opened"); }
my $content = ""; while(<FILE>) { $content .= $_; } close(FILE); $content =~ s/[\r\n]//gi; return $content; }
sub login { print "Content-type: text/html\n\n"; loadtemplate($login); outputhtml(); }
sub loginpost {
$content = getpassword($password_file);
if ($content ne $FORM{upass}) { $FORM{error} = "Error: Wrong password!"; login(); }
my $ctx = Digest::MD5->new; $ctx->add($password); my $digest = $ctx->hexdigest;
my $c = new CGI::Cookie(-name => 'image_md5_hash', -value => $digest, );
print "Set-Cookie: $c\n"; print "Content-type: text/html\n\n";
index2(); }
sub untarfiles { system("$tar -C $tmp_dir -xf $zip_dir".$FORM{zipname}." "); index3(); }
sub unzipfiles {
system("$unzip -P $unzippass -qo $zip_dir".$FORM{zipname}." -d $tmp_dir"); opendir(DIR, $tmp_dir); my $flag;
do { $flag = 0; @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname) && ($fname =~ /\.zip$/i)){ system("$unzip -P $unzippass -qo $tmp_dir".$fname." -d $tmp_dir"); unlink($tmp_dir.$fname); $flag = 1; } } } while($flag);
index3(); }
sub resizefiles {
print "Content-type: text/html\n\n";
$FORM{indir} = "$tmp_dir"; $FORM{outdir} = "$tmp_dir2";
loadtemplate($resize); outputhtml(); }
sub renamefiles {
$FORM{goon} = ""; $FORM{nrename} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname) && (($fname =~ /\.jpg$/i) || ($fname =~ /\.jpeg$/i))) { if ($fname =~ /^(.*?)_(.).*/) { my $l = $2; $l = ord(uc($l)); if (($l >= ord('1')) && ($l <= ord('9'))) { $l = chr($l + ord('a') - ord('1')); } else { if (($l >= ord('A')) && ($l <= ord('Z'))) { $l = chr($l + ord('j') - ord('A')); } } my $newfname = $1.$l.".jpg"; if ($newfname ne "" ) { rename($tmp_dir.$fname, $tmp_dir.$newfname); } $FORM{nrename}++;
} } } $FORM{goon} = "<BR><STRONG>".$FORM{nrename}." files renamed. <A HREF=\"".$FORM{script}."?action=resizefiles\">>>go next (resize)>></A>"; index3(); }
sub renamefiles_bareis {
$FORM{goon} = ""; $FORM{nrename} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname) && (($fname =~ /\.jpg$/i) || ($fname =~ /\.jpeg$/i))) { my $newfname = ""; if ($fname =~ /(.*?)\.(.*)/) { my $tname = $1; if ($tname =~ /(.*)_(\d+)/) { $newfname = $1.chr(ord('a')+ $2).".jpg"; }
if ((!($tname =~ /_/)) && ($tname =~ /\d$/)){ $newfname = $tname.'a.jpg'; } if ($newfname ne "" ) { rename($tmp_dir.$fname, $tmp_dir.$newfname); } $FORM{nrename}++; } } } $FORM{goon} = "<BR><STRONG>".$FORM{nrename}." files renamed. <A HREF=\"".$FORM{script}."?action=resizefiles\">>>go next (resize)>></A>"; index3(); }
sub renamefiles_gst {
$FORM{goon} = ""; $FORM{nrename} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname) && (($fname =~ /\.jpg$/i) || ($fname =~ /\.jpeg$/i))) { my $newfname = ""; if ($fname =~ /(.*?)\.(.*)/) { my $tname = $1; if ($tname =~ /(.*)_(\d+)/) { $newfname = $1.chr(ord('a')+ $2 -1).".jpg"; } if ($newfname ne "" ) { rename($tmp_dir.$fname, $tmp_dir.$newfname); } $FORM{nrename}++; } } } $FORM{goon} = "<BR><STRONG>".$FORM{nrename}." files renamed. <A HREF=\"".$FORM{script}."?action=resizefiles\">>>go next (resize)>></A>"; index3(); }
sub renamefiles_yuba {
$FORM{goon} = ""; $FORM{nrename} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname) && (($fname =~ /\.jpg$/i) || ($fname =~ /\.jpeg$/i))) { my $newfname = "";
if ($fname =~ /SUTTERYUBA(.*?)(.)\..*/) { $newfname = $1; my $tname = $2; if (ord(lc($tname)) >= ord('a') && ord(lc($tname)) <= ord('y')) { $tname = chr(ord(lc($tname))+1); } else { $tname .= "a"; } $newfname .= $tname.".jpg"; if ($newfname ne "" ) { rename($tmp_dir.$fname, $tmp_dir.$newfname); } $FORM{nrename}++; } } } $FORM{goon} = "<BR><STRONG>".$FORM{nrename}." files renamed. <A HREF=\"".$FORM{script}."?action=resizefiles\">>>go next (resize)>></A>"; index3(); }
sub index3 { print "Content-type: text/html\n\n"; index2(); }
sub index2 {
$FORM{zipfilesoptions} = ""; opendir(DIR, $zip_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $zip_dir.$fname) && (($fname =~ /\.zip$/i) || ($fname =~ /\.tar$/i))){ $FORM{zipfilesoptions} .="<OPTION value=\"$fname\">$fname</OPTION>\n"; } }
$FORM{nunpack} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { if (-f $tmp_dir.$_) { $FORM{nunpack}++; } }
loadtemplate($index); outputhtml(); }
sub do_convert { my ($inpath, $outpath, $filename, $neww , $newh) = @_; my $ImageOrg;
$ImageOrg = newFromPng GD::Image($inpath.$filename, 1); if (!defined($ImageOrg)) { $ImageOrg = newFromJpeg GD::Image($inpath.$filename, 1);
}
if(defined($ImageOrg)) { my ($oldw, $oldh) = $ImageOrg->getBounds();
#print "Content-type: image/jpeg\n\n";
if (!$newh) { $newh = $oldh * $neww / $oldw; }
if (!$neww) { $neww = $oldw * $newh / $oldh; }
$im = new GD::Image($neww , $newh, 1); $im->copyResampled($ImageOrg, 0, 0, 0, 0, $neww, $newh, $oldw, $oldh);
open(FILE, ">".$outpath.$filename); binmode (FILE); print FILE $im->jpeg; close(FILE); return 1; } else { return 0; } }
sub postresizefiles {
my ($inpath, $outpath, $neww , $newh);
$neww = $FORM{width};
if ($neww eq "") { $neww = 0; } if (!($neww =~ /^\d+$/)) { $FORM{error} .= "Invalid width. ";
}
$newh = $FORM{height}; if ($newh eq "") { $newh = 0; }
if (!($newh =~ /^\d+$/)) { $FORM{error} .= "Invalid height. ";
} if ($FORM{error} ne "") { $FORM{error} = "Error: ".$FORM{error}; resizefiles(); }
$inpath = $tmp_dir; $outpath = $tmp_dir2;
if (!($inpath =~ /\/$/)) { $inpath .= "/"; }
if (!($outpath =~ /\/$/)) { $outpath .= "/"; }
if ($FORM{action} eq "postresizefiles") { $FORM{nresize} = 0; opendir(DIR, $inpath); @files = readdir(DIR); close(DIR); foreach (@files) { if (-f $inpath.$_) { unlink($outpath.$_); } } }
opendir(DIR, $inpath); @files = readdir(DIR); close(DIR); foreach (@files) { if (-f $inpath.$_) { #print $_."\n"; if (!( -e $outpath.$_ )) { if (($neww) || ($newh)) { if (do_convert($inpath, $outpath, $_, $neww, $newh)) { $FORM{nresize}++; $FORM{lastfname} = $_; if (! ($FORM{nresize} % $CONVERT_LIMIT)) { do_resizecontinue(); } } } else { if (rename($inpath.$_, $outpath.$_)) { $FORM{nresize}++; } } } } } $FORM{goon} = "<BR><STRONG>".$FORM{nresize}." files resized. <A HREF=\"".$FORM{script}."?action=transferfiles\">>>go next (transfer)>></A>"; resizefiles(); }
sub do_resizecontinue { print "Content-type: text/html\n\n";
loadtemplate($resizecontinue); outputhtml();
}
sub transferfiles { print "Content-type: text/html\n\n";
$FORM{ntmp} = 0; opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname)){ $FORM{ntmp}++; } }
$FORM{zipfilesoptions} = ""; $FORM{nzip} = 0; opendir(DIR, $zip_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if (-f $zip_dir.$fname){ $FORM{zipfilesoptions} .="<OPTION value=\"$fname\">$fname</OPTION>\n"; $FORM{nzip}++; } }
$FORM{ntransfer} = 0; opendir(DIR, $tmp_dir2); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir2.$fname) && ($fname =~ /\.jpg$/i)){ $FORM{ntransfer}++; } }
loadtemplate($transfer); outputhtml();
}
sub posttransferfiles {
$FORM{ntransfered} = 0; $FORM{ntransfer} = 0; opendir(DIR, $tmp_dir2); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir2.$fname) && ($fname =~ /\.jpg$/i)){ my $fdir = ""; if ($fname =~ /(..).\.jpg$/) { $fdir = $1; } mkdir ($out_dir.$fdir);
if (rename ($tmp_dir2.$fname, $out_dir.$fdir."/".$fname)) { $FORM{ntransfered}++; } } }
$FORM{goon} = "<BR><STRONG>".$FORM{ntransfered}." files moved to /httpdocs/photos/ </STRONG>"; transferfiles(); }
sub deletezipfiles {
foreach (@delzipname) { my $fname = $_; if (-f $zip_dir.$fname){ unlink($zip_dir.$fname); } }
transferfiles(); }
sub deletetmpfiles {
opendir(DIR, $tmp_dir); @files = readdir(DIR); close(DIR); foreach (@files) { my $fname = $_; if ((-f $tmp_dir.$fname)){ unlink($tmp_dir.$fname); } } transferfiles(); }
sub main {
%cookies = fetch CGI::Cookie;
if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if ($name eq "delzipname") { push(@delzipname, $value); } else { $FORM{$name} = $value; } }
$FORM{script} = $script; if ($FORM{action} eq "loginpost") { loginpost(); }
if (defined ($cookies{image_md5_hash})) { $image_md5_hash = $cookies{image_md5_hash}->value; $content = getpassword($password_file); my $ctx = Digest::MD5->new; $ctx->add($password); my $digest = $ctx->hexdigest; if ($digest ne $image_md5_hash) { login(); } } else { login(); }
if ($FORM{action} eq "unzipfiles") { if ($FORM{zipname} =~ /\.zip$/) { unzipfiles(); } if ($FORM{zipname} =~ /\.tar$/) { untarfiles(); } }
if ($FORM{action} eq "renamefiles") { renamefiles_gst(); }
if ($FORM{action} eq "resizefiles") { $FORM{width} = "340"; $FORM{height} = "300"; resizefiles(); }
if ($FORM{action} eq "postresizefiles") { postresizefiles(); }
if ($FORM{action} eq "transferfiles") { transferfiles(); }
if ($FORM{action} eq "posttransferfiles") { posttransferfiles(); }
if ($FORM{action} eq "deletetmpfiles") { deletetmpfiles(); }
if ($FORM{action} eq "deletezipfiles") { deletezipfiles(); }
if ($FORM{action} eq "postresizefiles_continue") { postresizefiles(); }
index3();
}
|
|