Over a year ago I started learning Perl. I have been writing software since 1979, mostly medical and banking/brokerage stuff, so of all the languages, Java, ASP, C, whatever, I chose Perl because webmasters easily let it run on their hosted platforms... Then one day I wrote a letter to Tom Christenson describing a bug in Perl. Talk about getting flamed! He roasted me in a manner I would have responded with a physical assault had he been in the same room! It's not just that I am not so swift a Perl-man as he, but I TEACH KIDS software techniques and I have alot of patience with them and when a guy replies with a roasting lesson, he's just full of himself; sorry...my opinion. So, I sent him a coding example of the bug and here we are, two versions later; they never fixed it and it's a pretty major bug, in that alot of data can get lost when writing to files if you don't watch out... anyway, so I just write 'work-arounds' for it and figure Mr. Christenson has better fish to fry than me... But it left me with a totally bitter taste for Perl. It's a sweet language on the one-hand, yet as your article said, a rather sour group of coders. A few months later I asked Mr. Christ himself if he could kindly explain how to use CGI to capture an image from a form via CGI. I can capture text, buttons, selects, you name it, but I have yet to even get a reply as to how to have a user click on an html form, fill in a filename and send me a picture of themself, then, using method=post (which I an parse just fine thank you), set up a data stream to capture the image... So, here I come to you, Mr. Casey, man who wrote the first god damn Perl article that was timely and hopefully someone read... your 'Turning the tide...' and I ask you, please... is there a coding example of Perl and HTML combo SOMEWHERE that SOMEONE has (so I don't have to waste your time typing ...first you type this, then that etc.), that someone has to allow a client to upload a picture to my server. It took me 6 months to figure out how to sendmail, a year to figure out how to pop mail, and now, the last of the building blocks still eludes me... how to get a sweet smiling JPG picture from client to my server. I have attached an HTML doc I TRIED to use, via HTML/Java Script etc. and a piece of perl code that I TRIED to create to stream it... (I commented out the 'get user ID stuff', so the photo would always have the same name...no big deal)... and if you'd like to 'flame' (although I don't think that's your style), throw them, but please for god's sake, before I have to go to a friggin Java or Corba solution, can this be done in Perl and if so... HOW!!!!!! As for Mr. Christensen, at your next Perl symposium, remind him that when APPENDING to a DOS file that has a chr (26) (EOF) mark in it, Perl can't do it... ha ha... Now, if I wrote the C program that handled that aspect, I'd CHECK for a 26 in the last position of the file and if it existed, replace it with the first byte of the new string, then add a 26 to the end of the file... anyway... good luck and thank you in advance for ANY assistance you an offer regarding client to server jpg/gif CGI uploads... Craig Mead __________________________________________________ Do You Yahoo!? Get personalized email addresses from Yahoo! Mail http://personal.mail.yahoo.com/
#!/usr/bin/perl push(@INC,"e:/10000diamonds/web/userscripts") ; push(@INC,"e:/10000diamonds/web/userscripts/Mods"); $lmsg = ""; #################### END OF VAR INITIALIZATION $sep = chr(123).chr(93); $photomsg = "Thank you for your picture.<br>It will be reviewed.<br>You may send up to 3 pictures.<br>"; &tiptop; &nexthtml; exit; sub tiptop { $filedrive = "e:"; $whatsys = "c:/bat/pathh.bat"; ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($whatsys); if ($size > 0) { $filedrive = "c:"; } $datapath = "$filedrive/10000diamonds/web/data/"; $picpath = $datapath; $picl = length($picpath)-5; $picpath = substr($picpath,0,$picl); $picpath = $picpath."pics"; @ilines = undefined; $thiskey1 = ""; $thiskey2 = ""; ########## gettime debugged $nicedate = ""; $nicetime = ""; use Mods::gettime; gettime::mydate(); $nicedate = $gettime::nicedate; $nicetime = $gettime::nicetime; ######### if ($filedrive eq "e:") { use Socket; } $smtp_server = "mail5.hispeedhosting.com"; $smtp_port = 25; $NT= 1; # TOP OF MAIN LOOP &ParseCgi; $ouruser = $FORMVALS{'username'}; $ourfile = $FORMVALS{'yourpic'}; $ourform = $FORMVALS{'formname'}; $lmsg = "file was $ourfile"; &lit; $newfile = "$picpath"."thephoto.jpg"; # &finduser; if (length($newfile)>0) { &getphoto; } } sub getphoto { open FOTOFILE, ">$newfile"; binmode FOTOFILE; open USERFILE, "<$ourfile"; binmode USERFILE; $fotobyte = ""; $bytecnt = 0; while ((read (FOTOFILE, $fotobyte, 1)) && (bytecnt < 50000)) { print USERFILE $fotobyte; $bytecnt++; } close USERFILE; close FOTOFILE; if ($bytecnt > 50000) { $photomsg = "Your picture size exceeded the 50k limit!<br>Please try another photo!"; } } sub finduser { # commented out } sub ParseCgi { my $Fwork,$Fkey,$Fvalue,$Fdata; if ($ENV{'REQUEST_METHOD'} eq "FILE") { $Fdata = uc($ENV{'QUERY_STRING'}); $lmsg = "open $Fdata"; &lit; open EFILE, "<$Fdata"; @ELINES = <EFILE>; close EFILE; $Fwork = @ELINES[0]; $lmsg = "Testparse $Fwork\n"; &lit; } if ($ENV{'REQUEST_METHOD'} eq "GET") { $Fwork=$ENV{'QUERY_STRING'}; $lmsg = "getting $Fwork\n"; &lit; } $lmsg = "request method is $ENV{'REQUEST_METHOD'} and length is $ENV{'CONTENT_LENGTH'}\n"; &lit; if ($ENV{'REQUEST_METHOD'} eq "POST") { read (STDIN,$Fwork,$ENV{'CONTENT_LENGTH'}); $lmsg = "getting post of $Fwork with content length of $ENV{'CONTENT_LENGTH'}\n"; &lit; } $Fwork =~ s/$sep/\&/g; $lmsg = "Environment $Fwork\n"; &lit; foreach $Ftmp (split('&',$Fwork)) { $Ftmp =~ s/\+/\ /g; $Ftmp =~ s/~is~/=/g; ($Fkey,$Fvalue) = $Ftmp =~ /(.+)=(.+)/; $Fvalue =~ s/%(..)/pack("c",hex($1))/ge; $Fkey =~ s/%(..)/pack("c",hex($1))/ge; $FORMVALS{$Fkey}=$Fvalue; push @FORMKEYS , $Fkey; push @FORMVARS , $Fvalue; $lmsg = "$Fkey was $FORMVALS{$Fkey}"; &lit; } } sub lit { $lfilen = "$datapath"."dlog.htm"; ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($lfilen); if (index($lmsg, "Environment") == 0) { if (($size > 40000) || ($size < 10)) { open LFILE, ">$lfilen"; $tm = time(); print LFILE "<html><title>10k SysLog</title><head></head><body bgcolor=green>\n"; print LFILE "$tm <br>\n"; close LFILE; } } open LFILE, ">>$lfilen"; print LFILE "$oursesh $lmsg <br>\n"; close LFILE; } sub nexthtml { if ($NT) { print "HTTP/1.0 302 OK\n"; print "HTTP/1.0 200 OK\n"; print "Content-type: text/html\n\n"; print <<"EOT"; <HTML> <HEAD> <META HTTP-EQUIV = "REFRESH" CONTENT = "60; URL=http://www.10000diamonds.com/gempub.html#Refresh"> </HEAD> <BODY bgcolor=red><font color=white><font size=+3> $photomsg <hr><a href="http://www.10000diamonds.com/getphoto.html">Upload another photo</a> </BODY> </HTML> EOT } }