首頁(H)|HOWTO(T)|指南(G)|FAQ(F)|手冊頁(M)|Linux電子報(L)|LinuxFocus(S)
Linux電子報首頁|目錄|FAQ
讓 Linux 更加有趣呦!
The purpose of this article is to describe a simple Perl script I use to manage faxes on my fax server over the web. The method I use is very crude and is only used by myself and one other person in the company I work for, but it works for me. With very little effort, it would be very easy to setup professional scripts to handle faxes from small to very large corporations. I also believe it would be very easy to setup a web interface for other fax systems (if they don't already have it). Personally, I would much rather send and receive faxes over a webpage because then I can access the system (and the faxes) from anywhere in the world.
For my setup, I was using efax, which is not that easy to get along with. For any sane person, I recommend HylaFax or some other alternative (mgetty has some hope).
Please read my other efax article at Linux Focus.
First, look at how I compiled and then configured Apache 2.0. This is just one installation I did, out of many. No, Php is not running on my webserver even though the config file says I am.
I have a directory, /usr/local/apache2/htdocs/fax, where I put in my Perl script and .htaccess files.
Underneath this directory, I have these directories:
AuthName Test
AuthType Basic
AuthUserFile /usr/local/apache2/passwords/Passwords
order deny,allow
require user mark ted
You can change/add passwords with htpasswd.
Next, the last thing is to create a perl script. Here is my very crude Perl script. If I ever do anything else with it, I will convert it to a Python script first as Python is the next wave for programming (I hope). Python, Zope, Apache, Linux, and PostgreSQL are the top choices for my programming environment. Save it as "fax.pl" and perform a "chmod 755 fax.pl" after saving it.
You can download it or just view it below.
#!/usr/bin/perl
use CGI;
print "Content-type: text/html\n\n\n";
my $Home = "/usr/local/apache2/htdocs/fax";
my $Source = "$Home/source";
my $Archives = "$Home/archives";
my $AB_Archives = "$Home/ab";
my $Display = "$Home/display";
my $Home_Archives = "$Home/home";
`mkdir -p $Source`;
`mkdir -p $Archives`;
`mkdir -p $Display`;
`rsync -av /var/spool/fax/incoming/fax* $Source`;
`mkdir -p $AB_Archives`;
#------------------------------------
my @Files = <$Source/fax*>;
foreach my $File (@Files)
{
# print "$File\n";
my (@Temp) = split(/\//, $File);
my $File_Name = pop @Temp;
if (!(-e "$Archives/$File_Name\.pdf"))
{
print "<br>Processing new fax: $File\n";
my $Command = "tiff2ps $File > $Archives/$File_Name\.ps";
# print "$Command\n";
`$Command`;
my $Command = "/usr/bin/ps2pdf $Archives/$File_Name\.ps $Archives/$File_Name\.pdf";
# print "$Command\n";
`$Command`;
`cp $Archives/$File_Name\.pdf $Display/$File_Name\.pdf`;
}
}
#---------------------------------------
my $query = new CGI;
my $Action = $query->param('action');
my $File = $query->param('file');
$File =~ s/[^a-zA-Z0-9\_\.]//g;
if (!(-e "$Display/$File")) {}
elsif ($Action eq "archive")
{
print "<br>Archiving $File\n";
`rm -f $Display/$File`;
}
elsif ($Action eq "archive2")
{
print "<br>Archiving $File\n";
`cp $Display/$File $AB_Archives/`;
`rm -f $Display/$File`;
}
elsif ($Action eq "archive_home")
{
print "<br>Archiving $File\n";
`cp $Display/$File $Home_Archives/`;
`rm -f $Display/$File`;
}
print qq(<hr><a href="archives/">Archives</a> -- might be password protected.
<br><a href="home/">Home Archives</a> -- might be password protected.
<br><a href="ab/">Audioboomerang Archives</a>\n);
my $Table_Entries = "";
my @Files = <$Display/fax*>;
foreach my $File (sort @Files)
{
my (@Temp) = split(/\//, $File);
my $File_Name = pop @Temp;
my $Link = "<a href='display/$File_Name'>$File_Name</a>";
my $Delete = "<a href='fax.pl?action=archive&file=$File_Name'>archive file</a>";
my $AB ="<a href='fax.pl?action=archive2&file=$File_Name'>archive to AB</a>";
my $Home ="<a href='fax.pl?action=archive_home&file=$File_Name'>archive for Home</a>";
$Table_Entries .= qq(<tr><td>$Link</td><td>$Delete</td><td>$Home</td><td>$AB</td></tr>\n);
}
print "<table border=1><tr><th>View Fax</th><th>Archive the Fax</th>
<th>Archive to AudioBoomerang</th></tr>\n";
print $Table_Entries;
print "</table>\n";
if (@Files < 1) {print "<h1> No faxes or they are all archived.</h1>\n";}
I think it is pretty cool, and my boss thinks it is pretty cool. I am going to switch to a different fax service because efax is hard to deal with when sending faxes. My next goal is to make it so I can send faxes through a webpage. I will have to set it up so that you first print your document to a postscript file and then upload it (or upload a graphic image or something else that Linux can convert usign a standard tool).
I am not sure what other fax setups utilize the web, but from my perspective, I always want to have access to my faxes over the web or to send a fax over the web.
Copyright © 2002, Mark Nielsen. Copying license Published in Issue 85 of Linux Gazette, December 2002
首頁(H)|HOWTO(T)|指南(G)|FAQ(F)|手冊頁(M)|Linux電子報(L)|LinuxFocus(S)