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.
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 ( "[email protected]",
"Comments from Web Form",
$mainmessage, "From: [email protected]" );
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.
5. 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 to 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).
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.