PHP vs CGI
Written by Christopher Heng
PHP seems very much in vogue now - with an increasingly
greater number of
web hosts providing support for it. For those who have
only vaguely heard of it and are not too sure what it is, this article
discusses PHP and informally compares it with writing CGI scripts in Perl.
PHP is a free server side scripting language. It can be built into web
servers like Apache and you can use it to generate your pages dynamically.
You would probably use it in situations you would have otherwise used a CGI
script for. For example, thefreecountry.com's Feedback form (among other
things) uses a PHP script to generate the form and send the message to me.
1. The Language
If you are coming from a C, C++, Perl, Java or JavaScript background,
learning PHP would probably be a piece of cake. In fact, you probably can
get started writing your scripts almost immediately (I did).
It uses typeless variables the way Perl does, prefixed with a "$" sign and
holding any data type you wish. For example, $whatever can be a variable
that you can use to contain strings, numbers, whatever. If $whatever
contained a number, you can increment its value using
$whatever++ ;
or
$whatever += 1 ;
or
$whatever = $whatever + 1 ;
Remind you of Perl, C, C++, Java, JavaScript? See what I mean?
2. Built-in Facilities
Unlike Perl, which is a general purpose scripting language that you can use
for a wide variety of purposes (and not just generating web pages), PHP was
designed from the ground up to be used for scripting web pages. As a result,
it has lots of facilities built into that you may have to write yourself or
use some pre-written module if you were using Perl.
For example, do you want to send email to yourself from a form on the web
page? In Perl, you probably would have to code something like the following:
open ( MAIL,"|/usr/sbin/sendmail -t"); print MAIL "To: myself\@mydomain.com\n" ; print MAIL "From: visitor\@hisdomain.com\n" ; print MAIL "Subject: Comments from Web Form\n\n" ; print MAIL $mainmessage ; close ( MAIL ) ;
In PHP, the same thing would be coded as follows:
mail ( "myself@mydomain.com", "Comments from Web Form", $mainmessage, "From: visitor@hisdomain.com" );
Nifty, huh? The same goes for other facilities like sending or retrieving a
document via HTTP or FTP, etc. Since PHP was specially designed for a
website, the facilities that web designers typically want in a scripting
language are built into it.
Another convenience is its handling of form input. Take for example a form
with a field like:
<input type=text name="dateofbirth">
You can immediately access that field with the $dateofbirth variable. No
need to parse form inputs and the like. All fields in the form are
automatically converted to variables that you can access.
Accessing databases is just as easy. There are built-in facilities in PHP to
access MySQL, MSQL, Dbase, Oracle, InterBase, and so on (the list is very
long). Need to MIME encode your message? There's a function to do it for you
too.
There're lots more. I obviously can't run through the entire list - it would
take a whole book to be exhaustive. This is just to whet your appetite.
3. Generating web pages
By default anything you type in your PHP document is given verbatim to the web browser. So a simple PHP script might look like the following:
<html> <head><title>My First PHP Script</title></head> <body> <h1>My First PHP Script</h1> <p> Welcome, Internet user from IP address <?echo $REMOTE_ADDR?>. Hope you like my first PHP page. </body> </html>
Notice that it looks exactly like a web page, except for the <? ... ?> bit,
which encloses the PHP script. In this case, all we want is for the script
to output the visitor's IP address to the page, hence we use the "echo"
function. The web server's environment variable REMOTE_ADDR is automatically
made available to the PHP script via a variable of the same name (as are all
other environment variables and form inputs).
There are many ways to embed your PHP script into your page, or to design
your page itself. But you got the general idea. As I said, PHP was designed
for web pages, so the idea of output to the server is built into its design.
It makes writing such scripts a very pleasant task.
4. Debugging With PHP Vs Perl CGI
Interestingly, if you're debugging your scripts online, PHP really shines.
Normally, when a Perl CGI script goes awry, you'll get a cryptic error
message in your browser: something to the effect of "500 Internal Server
Error".
When your PHP scripts online, you get error messages pinpointing the
offending lines in your code to help you locate the error. However, the
message is sometimes a cryptic "parse error" or the like, so you still have
to crack your head to figure out the problem. But at least you know where it
occurred. With Perl CGI scripts, an "Internal Server Error" could have
arisen from any number of causes, from a syntax error to a simple case of
forgetting to make the file executable or uploading it in text mode.
Debugging offline, however, is another story. Some people have found that
the Perl interpreter gives more helpful messages than the PHP interpreter,
which tends to label many things as "parse error". This may change, though,
as newer versions of the PHP interpreter is released.
4. What's the Catch?
While I obviously enjoy using PHP as my web scripting language, I do not
claim that it is the perfect solution for all your website needs.
You might want to consider the following prior to committing yourself ot it.
The list, incidentally, is not exhaustive.
a. Not all web hosts provide PHP facilities. While it is true that many also
do not provide CGI access, the number providing PHP is even less!
In fact, where free web space providers are concerned, the number providing
PHP can probably be counted with one hand. Indeed, even if you manage to
find free web hosting with PHP access, you have to ask yourself whether you
really want to depend on it for your site. There might be a day when you
need to move your site, and you may be hard-pressed to find another free web
host that supports PHP.
However, if you host with commercial web hosting companies, you probably
will have less problems. It seems to me like the large majority of vendors
support PHP, and even those who currently don't provide it plan to support
it in the near future.
b. Like all web scripting languages (Perl included), debugging the script
can be a pain in the neck unless you download and install your own copy of
PHP. Otherwise you might spend many hours online trying to test and debug
your script (unless of course it's a trivial script). Instructions for how
to install it on Windows can be found in my article "How to Install PHP on
Windows" at:
http://www.thefreecountry.com/articles/installphp.shtml
Incidentally, you can also operate your own Apache web server at home, so as
to mimic the entire environment of your actual site (or as close to it as
necessary). You can read all about setting up your own Apache, if you have a
Windows machine, from my other article "How to Install Your Own Apache
Server on Windows 95/98/NT/2000" at:
http://www.thefreecountry.com/articles/apache.shtml
Of course if you have a Linux box around, you're probably all set. Just dig
up your installation CDROMs and install the server and PHP module from there
if you've not already done so. (Most modern Linux distributions come bundled
with the Apache server and PHP Apache module.)
c. It is not a general purpose language. While it has many facilities
specifically catered towards web programming, it is not Perl (or C or C++ or
Java). I personally however find PHP more than adequate for my web
programming needs.
5. Where to Get It?
A number, if not most, of the Unix web hosts listed on our Budget Web
Hosting and Best Web Hosting pages already have PHP support. You can find
them at the following URLs:
http://www.thefreecountry.com/ecentricity/bestwebhosts.shtml
http://www.thefreecountry.com/ecentricity/budgethosting.shtml
There are probably a few (very few) hosts listed on our Free Web Hosting
pages that support PHP. You can check them out yourself if you don't want to
pay for web hosting:
http://www.thefreecountry.com/ecentricity/hosts.html
You should also download the entire PHP documentation set from the PHP web
site. At the time of this writing, there appears to be no tutorial to get
you started. Perhaps I might put up one on thefreecountry.com when I have
time.
The PHP web site can be found at:
http://www.php.net/
You can also get sources and binaries for PHP there, if you wish to run a
copy on your own machine for testing purposes. Note that you don't have to
have a web server to run PHP on your machine, although it is probably more
convenient to have it. On Unix based systems PHP comes either as an Apache
module or a separate binary. On Windows, PHP is implemented as a separate
executable. You can just run the executable versions of PHP on your scripts
offline. You'll probably want to set up your environment properly and strip
the headers from the output to more closely mimic your actual web site.
Happy scripting!
* Copyright 2000 by Christopher S L Heng. All
rights reserved.
Visit
http://www.thefreecountry.com/
for more free articles, resources and tools for webmasters and software
programmers. You can also subscribe to the FREE thefreecountry.com
newsletter, where these articles are first published, by sending an empty
email to
mailto:subscribe@thefreecountry.com