| |
| |
Preface | |
| |
| |
| |
Getting Your Tools in Order | |
| |
| |
Open Source Versus Proprietary Software | |
| |
| |
Evaluating a Hosting Provider | |
| |
| |
Web Hosting Alternatives | |
| |
| |
Getting Started with SSH/Telnet | |
| |
| |
Meet the Unix Shell | |
| |
| |
Network Troubleshooting | |
| |
| |
A Suitable Text Editor | |
| |
| |
| |
Getting Started with Perl | |
| |
| |
Finding Perl on Your System | |
| |
| |
Creating the "Hello, world!" Script | |
| |
| |
The Dot Slash Thing | |
| |
| |
Unix File Permissions | |
| |
| |
Running (and Debugging) the Script | |
| |
| |
Perl Documentation | |
| |
| |
Perl Variables | |
| |
| |
A Bit More About Quoting | |
| |
| |
"Hello, world!" as a CGI Script | |
| |
| |
| |
Running a Form-to-Email Gateway | |
| |
| |
Checking for CGI.pm | |
| |
| |
Creating the HTML Form | |
| |
| |
The [left angle bracket]FORM[right angle bracket] Tag's ACTION Attribute | |
| |
| |
The mail_form.cgi Script | |
| |
| |
Warnings via Perl's-w Switch | |
| |
| |
The Configuration Section | |
| |
| |
Invoking CGI.pm | |
| |
| |
foreach Loops | |
| |
| |
if Statements | |
| |
| |
Filehandles and Piped Output | |
| |
| |
die Statements | |
| |
| |
Outputting the Message | |
| |
| |
Testing the Script | |
| |
| |
| |
Power Editing with Perl | |
| |
| |
Being Careful | |
| |
| |
Renaming Files | |
| |
| |
Modifying HREF Attributes | |
| |
| |
Writing the Modified Files Back to Disk | |
| |
| |
| |
Parsing Text Files | |
| |
| |
The "Dirty Data" Problem | |
| |
| |
Required Features | |
| |
| |
Obtaining the Data | |
| |
| |
Parsing the Data | |
| |
| |
Outputting Sample Data | |
| |
| |
Making the Script Smarter | |
| |
| |
Parsing the Category File | |
| |
| |
Testing the Script Again | |
| |
| |
| |
Generating HTML | |
| |
| |
The Modified make_exhibit.plx Script | |
| |
| |
Changes to andparse_exhibitor | |
| |
| |
Adding Categories to the Company Listings | |
| |
| |
Creating Directories | |
| |
| |
Generating the HTML Pages | |
| |
| |
Generating the Top-level Page | |
| |
| |
| |
Regular Expressions Demystified | |
| |
| |
Delimiters | |
| |
| |
Trailing Modifiers | |
| |
| |
The Search Pattern | |
| |
| |
Taking It for a Spin | |
| |
| |
Thinking Like a Computer | |
| |
| |
| |
Parsing Web Access Logs | |
| |
| |
Log File Structure | |
| |
| |
Converting IP Addresses | |
| |
| |
The Log-Analysis Script | |
| |
| |
Different Log File Formats | |
| |
| |
Storing the Data | |
| |
| |
The "Visit" Data Structure | |
| |
| |
| |
Date Arithmetic | |
| |
| |
Date/Time Conversions | |
| |
| |
Using the Time::Local Module | |
| |
| |
Caching Date Conversions | |
| |
| |
Scoping via Anonymous Blocks | |
| |
| |
Using a BEGIN Block | |
| |
| |
| |
Generating a Web Access Report | |
| |
| |
The andnew_visit and andadd_to_visit Subroutines | |
| |
| |
Generating the Report | |
| |
| |
Showing the Details of Each Visit | |
| |
| |
Reporting the Most Popular Pages | |
| |
| |
Fancier Sorting | |
| |
| |
Mailing the Report | |
| |
| |
Using cron | |
| |
| |
| |
Link Checking | |
| |
| |
Maintaining Links | |
| |
| |
Finding Files with File::Find | |
| |
| |
Looking for Links | |
| |
| |
Extracting | |
| |
| |
Putting It All Together | |
| |
| |
Using CPAN | |
| |
| |
Checking Remote Links | |
| |
| |
A Proper Link Checker | |
| |
| |
| |
Running a CGI Guestbook | |
| |
| |
The Guestbook Script | |
| |
| |
Taint Mode | |
| |
| |
Guestbook Preliminaries | |
| |
| |
Untainting with Backreferences | |
| |
| |
File Locking | |
| |
| |
Guestbook File Permissions | |
| |
| |
| |
Running a CGI Search Tool | |
| |
| |
Downloading and Compiling SWISH-E | |
| |
| |
Indexing with SWISH-E | |
| |
| |
Running SWISH-E from the Command Line | |
| |
| |
Running SWISH-E via a CGI Script | |
| |
| |
| |
Using HTML Templates | |
| |
| |
Using Templates | |
| |
| |
Reading Fillings Back In | |
| |
| |
Rewriting an Entire Site | |
| |
| |
| |
Generating Links | |
| |
| |
The Docbase Concept | |
| |
| |
The CyberFair Site's Architecture | |
| |
| |
The Script's Data Structure | |
| |
| |
Using Data::Dumper | |
| |
| |
Creating Anonymous Hashes and Arrays | |
| |
| |
Automatically Generating Links | |
| |
| |
Inserting the Links | |
| |
| |
| |
Writing Perl Modules | |
| |
| |
A Simple Module Template | |
| |
| |
Installing the Module | |
| |
| |
The Cyberfair::Page Module | |
| |
| |
| |
Adding Pages via CGI Script | |
| |
| |
Why Add Pages with a CGI Script? | |
| |
| |
A Script for Creating HTML Documents | |
| |
| |
Controlling a Multistage CGI Script | |
| |
| |
Using Parameterized Links | |
| |
| |
Building a Form | |
| |
| |
Posting Pages from the CGI Script | |
| |
| |
Running External Commands with system and Backticks | |
| |
| |
Race Conditions | |
| |
| |
File Locking | |
| |
| |
Adding Link Checking | |
| |
| |
| |
Monitoring Search Engine Positioning | |
| |
| |
Installing WWW::Search | |
| |
| |
A Single-Search Results Tool | |
| |
| |
A Multisearch Results Tool | |
| |
| |
The map Function | |
| |
| |
| |
Keeping Track of Users | |
| |
| |
Stateless Transactions | |
| |
| |
Identifying Individual Users | |
| |
| |
Basic Authentication | |
| |
| |
Automating User Registration | |
| |
| |
Storing Data on the Server | |
| |
| |
The Register Script | |
| |
| |
The Verification Script | |
| |
| |
| |
Storing Data in DBM Files | |
| |
| |
Data Storage Options | |
| |
| |
The tie Function | |
| |
| |
A DBM Example Script | |
| |
| |
Blocking Versus Nonblocking Behavior | |
| |
| |
Storing Multilevel Data in DBM Files | |
| |
| |
An MLDBM-Using Registration Script | |
| |
| |
An MLDBM-Using Verification Script | |
| |
| |
| |
Where to Go Next | |
| |
| |
Unix System Administration | |
| |
| |
Programming | |
| |
| |
Apache Server Administration and mod_perl | |
| |
| |
Relational Databases | |
| |
| |
Advocacy | |
| |
| |
Index | |