TweetFollow Us on Twitter

Getting Started with PHP

Volume Number: 20 (2004)
Issue Number: 11
Column Tag: Programming

Getting Started with PHP

by Dave Mark

Qne of the things I love most about writing this column is the opportunity to play with different technologies. I especially love it when this means playing with a technology that takes a sharp left turn from the traditional. A perfect example of this is PHP, a programming language that looks like C, smells like C, but takes C in a very different direction.

What Makes PHP Different

In most programming languages, the output from your program goes to the user, in some form or another. For example, in your Cocoa program, you might put up a window, then display some data in the window, perhaps with a scrollbar that lets the user scroll through the data and buttons that allows the user to accept the data or cancel whatever process brought up the data in the first place. The point is, some portion of your program is directly dedicated to interacting with the user.

PHP is different. Though PHP does sport a set of user interface functions, one of its strongest uses is as a means to dynamically generate web content. For example, suppose you were building a web site and you wanted to serve up one set of pages for folks running Safari and a different set of pages for other folks. There are lots of ways to do this, and PHP offers its own mechanism for doing this (and we'll take a look at this a bit later in the column).

More importantly, suppose you wanted to build a web site that was data-driven. For example, you might build a table that lists the most up-to-date statistics from your weekly Halo 2 league. You could embed the statistics directly in your HTML, or you could use PHP to build an interface to an open source database like mySQL or PostgreSQL. You'd write one PHP-laden web tool for entering the data, then another for displaying the data.

PHP is idea for managing HTML forms. Especially if you'll want to back your forms up to a database. Once you get a taste of PHP, you'll definitely want to play with it yourself. And the cool thing is, if you know a bit of C, you'll find PHP quite easy to pick up.

Installing PHP

In the golden, olden days of Mac OS X, installing PHP was a bit of an adventure. For starters, you downloaded the latest version of Apple's developer tools, then used Google or the like to find the most recent source code distribution of PHP that some kind soul had ported to Project Builder (later Xcode) format. Each source code distribution came with a set of scripts that would drive the process of compiling the source and installing the binaries in the right place. These scripts are known in the Unix world as makefiles. Once you downloaded the distribution that was right for your version of Mac OS X, you ran the makefile, got yourself a sandwich and, hopefully, by your last bite you had yourself an installed version of PHP. More often than not, however, you ran into a funky error that required you to tweak some permission or other, or perhaps rename a directory. Bottom line, this was not rocket science, but it was far from trivial.

Nowadays, PHP has really hit the mainstream. Soon after each rev of PHP or Mac OS X release, web pages pop up with instructions on the best way to install that version of PHP on your particular configuration of Mac OS X. Some folks even go to the trouble of creating traditional Mac OS X installers that do all the hard work for you.

I used Google to search for:

"php 5" "mac os x" 

Why php 5? When I wrote this article, PHP 5.0.2 was the latest release. By the time you read this, I suspect PHP 5.0.3 will be out, if not an even later version. But the major release will still likely be 5, so a search for PHP 5 will work.

The site I chose for this month's column has a packaged installer for PHP 5.0.1, as well as a forum section where you can message with other folks with similar experiences. Hopefully, by the time you read this, the installer will have been updated to the latest version, but for the purposes of this discussion, 5.0.1 will do just fine.

Here's the link to the main page:

http://www.entropy.ch/software/macosx/php/

Note that this install is for the version of PHP designed to work with the Apache web server that ships with Mac OS X. You are going to install PHP on your own machine, then put our php test pages in the Sites folder in your home directory. In effect, the Apache web server on your local machine will be serving up pages to you, without going over the net. This is a great way to learn PHP. With this setup, you can make changes to your code without using an FTP client. Just edit the file in place, save, then test. As long as you save your change, you don't even need to close the file before switching back to your browser to hit the reload button to retest the page. This is an extremely efficient way to work.

If this is still a bit confusing to you, not to worry. After we do the install, we'll run a few examples so you get the hang of working with PHP.

Figure 1 shows the install instructions from our download page. You'll want to click on the link labeled PHP 5.0.1 for Apache 1.3 (remember, the page might have been updated to a more recent version of PHP). Click the link and a disk image will be downloaded. It's about 20 megs, so it might take a while. Once the .dmg file downloads, the disk image will mount. Navigate into it and double click on the file named php-5.0.1.pkg (or whatever the .pkg file is called when you download it).


Figure 1 - Installation instructions for installing PHP

Follow the installation instructions and PHP should install without a hitch. To verify that the install went OK, fire up Terminal and enter these two commands:

ls -F /usr/local 
ls -F /usr/uocal/php5/ 

For you non-Unix folks, the ls command lists the contents of the specified directory or file. The -F option asks ls to put a * at the end of executable files and a / at the end of directories. This makes an ls listing a bit easier to understand.

Figure 2 shows my results after I did my PHP install. Note that PHP is installed in the directory /usr/local/php5/.


Figure 2 - A Terminal listing showing the location of the newly installed PHP files

To test the installation, create a plain text file using a tool like TextEdit, BBEdit, or Xcode. Be sure that your text files are plain text files. Personally, I use BBEdit for all my PHP and web editing. Here's a link to a page that will let you download a demo of BBEdit:

http://www.barebones.com/products/bbedit/ demo.shtml

Regardless of how you create the plain text file, here's what goes in it:

<?php phpinfo() ?> 

Save this line in a file named test.php and place the file inside the Sites directory in your home directory. It is critical that the file have the .php file extension so the Apache web server knows to pass the file through the PHP pre-processor before serving up the page. The PHP pre-processor will scan the file looking for PHP code to interpret. PHP code always starts with "<?php" and ends with "?>". You can have more than one block of PHP code in a single file. We'll show examples of this a bit further along in the article.

The line above contains a single PHP statement, a call of the function phpinfo(). This function returns a bunch of information about your PHP installation, all formatted in a two column HTML table. Why does the function return HTML? That's one of the most important aspects of PHP. Your PHP code will generate HTML code, which will appear in line with the HTML code in which it is embedded. Once the PHP code is done running and its output is incorporated into the surrounding HTML, the full HTML is returned by the server and rendered by your browser. Again, we'll get into this more later on in the article.

For the moment, save your one line php file into the Sites directory in your home folder. To test the file, use this link:

http://127.0.0.1/~davemark/test.php

Obviously, you'll replace "davemark" with your own user name. The 127.0.0.1 is an IP address that represents your local machine. The ~davemark represents the Sites directory of the user davemark. And, of course, the file name test.php is the file we are passing along to the Apache web server.

Figure 3 shows the output when I ran test.php on my machine. Obviously, this is just the first few lines of a very long series of tables.


Figure 3 - The output from phpinfo().

Hello, World!

Our next example shows what happens when we mix PHP and HTML. Create a new plain text file and type in this code:

<html>
	<head>
		<title>PHP Test</title>
	</head>
	<body>
		<p>This is some pure HTML loveliness.</p>
		<?php
			echo "<p>Hello, World!</p>";
		?>
		<p>Did we echo properly?</p>
		<?php
			echo date("r");
		?>
		<p>It works!!!</p>
	</body>
</html>
</PRE>

Save the file as hello.php and save it in your Sites directory. When you send this file to Apache, Apache will note the .php file extension and send the file to the PHP pre-processor. The pre-processor will scan the file, copying the HTML to its output as is, until it encounters the open PHP tag:

<?php 

As soon as it hits the end of those characters, the pre-processor starts interpreting the rest of the file as PHP code, until it hits the close PHP tag:

?> 

Once it hits that close tag, the processor runs the PHP code it just scanned and places the output from the PHP code following the HTML code it just copied. In the hello.php example, this means executing this statement:

echo "<p>Hello, World!</p>"; 

and copying the output from that statement into the HTML stream. The echo command simply copies its parameters to output, where it joins the HTML stream.

Once the close PHP tag is encountered, the pre-processor continues copying the HTML to its output until it hits the end of the code or encounters another open PHP tag.

Note that our example has two chunks of PHP code. The second chunk executes this line of code:

echo date("r");

The first version of echo you saw copied the text string to output. This version of echo has a function as a parameter. In that case, the PHP pre-processor calls the function and returns the output of the function call as input to echo. echo simply echoes that output to the HTML stream.

Confused? Type in this link to execute your copy of hello.php. Be sure to replace my user name with your user name:

http://127.0.0.1/~davemark/hello.php

The output of this example is shown in Figure 4.


Figure 4 - hello.php in action.

To get a true sense of this process, choose View Source from Safari's View menu. This will show you the merged PHP output and HTML code. Here's my merged source:

<html>
	<head>
		<title>PHP Test</title>
	</head>
	>body>
		<p>This is some pure HTML loveliness.</p>
		<p>Hello, World!</p>		<p>Did we echo properly?</p>
		Fri,  1 Oct 2004 11:01:48 -0400		<p>It works!!!</p>
	</body>
</html>

Notice that the output from the PHP commands is right there in the mix. One bit of funkiness, though. Notice that the PHP generated HTML did not include a carriage return, so the follow-on HTML starts on the same line as the end of the PHP output. In this line of output:

		<p>Hello, World!</p>		
		<p>Did we echo properly?</p>

you can see that the two paragraphs are on the same line of source. This will not affect the final output, but it does make the source a bit harder to read. An easy solution to this is to embed a carriage return character "\n" at the end of each line of PHP output.

Here's a new version of hello.php:

<html>
	<head>
		<title&lgt;PHP Test</title>
	</head>
	<body>
		<p>This is some pure HTML loveliness.</p>
		<?php
			echo "<p>Hello, World!</p>\n";
		?>
		<p>Did we echo properly?</p>
		<?php
			echo date("r");
			echo "\n";
		?>
		<p>It works!!!</p>
	</body>
</html>

Note that we added the "\n" directly at the end of the first echo's parameter string. Since the second echo did not use a string, we added a second line of code, just to echo the "\n".

When you run this chunk of code, the output will be the same. But let's take a look at the source code that is generated when you do a View Source:

<html>
	<head>
		<title>PHP Test</title>
	</head>
	<body>
		<p>This is some pure HTML loveliness.>/p>
		<p>Hello, World!</p>
		<p>Did we echo properly?</p>
		Fri,  1 Oct 2004 11:39:16 -0400
		<p>It works!!!</p>
	</body>
</html>

Notice that the carriage returns we added made the intermediate source a bit easier to read.

Include Other PHP Files

Here's another example, for you folks who like the organizational power of include files. This one is a slight mod of one from the php.net site. Create a new file named vars.php and type in the following code:

<?php
	$color = 'green';
	$fruit = 'apple';
?>

Save the file in the Sites folder and create a second new file named inc_test.php. Here's the code:

<html>
	<head>
		<title>PHP Include Test</title>
	</head>
	<body>
		<?php
			echo "<p>A $color $fruit</p>"; // A
			include 'vars.php';

			 echo "<p>A $color $fruit</p>"; // A green apple
		?> 
	</body>
</html>

Save this file in the Sites folder as well. Run this example by typing in:

http://127.0.0.1/~davemark/inc_test.php

Remember to replace davemark with your username. Your output should look like this:

A

A green apple

In a nutshell, inc_test.php is made up of two identical echo statements, with an include statement in between. The echo statements print the value of two variables, each of which is set in the include file. Notice that the first echo does not have values for $color and $fruit and does not print anything for those values. The second echo occurs after the include file. Since the include file sets the values for the variables, the second echo prints those values.

This example was included as a bit of food for thought. Many web sites achieve their unified look and feel through included header, nav bar, and footer files, as well as through a judicious use of variables. No doubt you'll want to take advantage of include files and variables as you build your own PHP projects.

Restarting Apache

If you happened to reboot your machine since you did the PHP install, you may have noticed that Apache is no longer running. Not to worry. There are two easy ways to restart the server. The simplest way is to select System Preferences... from the apple menu, then select the Sharing icon. On the Sharing page, click on the Services tab and make sure the Personal Web Sharing checkbox is checked. As soon as you check the checkbox, Apache will be started and the Start button will change to Stop so you can stop the server. Unless Apache runs into a problem at restart, it should be restarted automatically when you restart your machine.

Another way to start and stop the server is by using the apachectl command in Terminal. Start up Terminal and type in this command:

sudo apachectl restart

You'll be prompted for your admin password, since the sudo command executes a shell with root privileges. Type in the password and the Apache server will be stopped (if it is running) and restarted. Either way works just fine.

Till Next Month...

We'll be doing a bit more with PHP next month. In the meantime, check out the web site http://www.php.net, the official web site for PHP developers. There are a ton of resources on this site, including complete on-line and downloadable PHP documentation. To figure out why the date() function did what it did, find the search field at the top right of the main page and type in the word "date", make sure the popup menu says "function list", then hit return or click on the right arrow icon. This will take you to the "date" documentation.

Check out all the format character options in Table 1 and play with a few of them. Enjoy, and I'll see you next month.

Oh, if you haven't done so already, be sure to head over to http://spiderworks.com and sign up. The new version of Learn C


Dave Mark is a long-time Mac developer and author and has written a number of books on Macintosh development. Dave has been writing for MacTech since its birth! Be sure to check out Dave's latest and greatest at http://www.spiderworks.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

GIMP 2.8.14p2 - Powerful, free image edi...
GIMP is a multi-platform photo manipulation tool. GIMP is an acronym for GNU Image Manipulation Program. The GIMP is suitable for a variety of image manipulation tasks, including photo retouching,... Read more
Sandvox 2.10.2 - Easily build eye-catchi...
Sandvox is for Mac users who want to create a professional looking website quickly and easily. With Sandvox, you don't need to be a Web genius to build a stylish, feature-rich, standards-compliant... Read more
LibreOffice 5.0.1.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
f.lux 36.1 - Adjusts the color of your d...
f.lux makes the color of your computer's display adapt to the time of day, warm at night and like sunlight during the day. Ever notice how people texting at night have that eerie blue glow? Or wake... Read more
VirtualBox 5.0.2 - x86 virtualization so...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
File Juicer 4.43 - Extract images, video...
File Juicer is a drag-and-drop can opener and data archaeologist. Its specialty is to find and extract images, video, audio, or text from files which are hard to open in other ways. In computer... Read more
Apple MainStage 3.2 - Live performance t...
MainStage 3 makes it easy to bring to the stage all the same instruments and effects that you love in your recording. Everything from the Sound Library and Smart Controls you're familiar with from... Read more
formZ 8.5 - Solid and surface modeler. (...
formZ pro is a powerful 3D design application featuring a variety of modeling personalities and tools with an easy to use interface to express and communicate your imagination. It is based on... Read more
PopChar 7.2 - Floating window shows avai...
We're also selling a 5-license family pack for only $25.99! PopChar helps you get the most out of your font collection. With its crystal-clear interface, PopChar provides a frustration-free way to... Read more
FileMaker Pro 14.0.2 - Powerful, easy-to...
FileMaker Pro is powerful, easy-to-use software used to create custom solutions for your business that run on iPad, iPhone, Windows, Mac and the web. Use FileMaker Pro to manage and share information... Read more

ReBoard: Revolutionary Keyboard (Utilit...
ReBoard: Revolutionary Keyboard 1.0 Device: iOS Universal Category: Utilities Price: $1.99, Version: 1.0 (iTunes) Description: Do everything within the keyboard without switching apps! If you are in WhatsApp, how do you schedule a... | Read more »
Tiny Empire (Games)
Tiny Empire 1.1.3 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1.3 (iTunes) Description: Launch cannonballs and blow tiny orcs into thousands of pieces in this intuitive fantasy-themed puzzle shooter! Embark on an... | Read more »
Astropad Mini (Productivity)
Astropad Mini 1.0 Device: iOS iPhone Category: Productivity Price: $4.99, Version: 1.0 (iTunes) Description: *** 50% off introductory price! ​*** Get the high-end experience of a Wacom tablet at a fraction of the price with Astropad... | Read more »
Emo Chorus (Music)
Emo Chorus 1.0.0 Device: iOS Universal Category: Music Price: $1.99, Version: 1.0.0 (iTunes) Description: Realistic Choir simulator ranging from simple Chorus emulation to full ensemble Choir with 128 members. ### introductory offer... | Read more »
Forest Spirit (Games)
Forest Spirit 1.0.5 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.5 (iTunes) Description: | Read more »
Ski Safari 2 (Games)
Ski Safari 2 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: The world's most fantastical, fun, family-friendly skiing game is back and better than ever! Play as Sven's sister Evana, share... | Read more »
Lara Croft GO (Games)
Lara Croft GO 1.0.47768 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.47768 (iTunes) Description: Lara Croft GO is a turn based puzzle-adventure set in a long-forgotten world. Explore the ruins of an ancient... | Read more »
Whispering Willows (Games)
Whispering Willows 1.23 Device: iOS Universal Category: Games Price: $4.99, Version: 1.23 (iTunes) Description: **LAUNCH SALE 50% OFF** - Whispering Willows is on sale for 50% off ($4.99) until September 9th. | Read more »
Calvino Noir (Games)
Calvino Noir 1.1 Device: iOS iPhone Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: The film noir stealth game. Calvino Noir is the exploratory, sneaking adventure through the 1930s European criminal underworld.... | Read more »
Angel Sword (Games)
Angel Sword 1.0 Device: iOS Universal Category: Games Price: $6.99, Version: 1.0 (iTunes) Description: Prepare to adventure in the most epic full scale multiplayer 3D RPG for mobile! Experience amazing detailed graphics in full HD.... | Read more »

Price Scanner via MacPrices.net

Tablet Screen Sizes Expanding as iPad Pro App...
Larger screen sizes are gaining favor as the tablet transforms into a productivity device, with shipments growing 185 percent year-over-year in 2015. According to a new Strategy Analytics’ Tablet... Read more
Today Only: Save US$50 on Adobe Elements 13;...
Keep the memories. lose the distractions. Summer’s winding down and it’s time to turn almost perfect shots into picture perfect memories with Elements 13. And get the power to edit both photos and... Read more
1.4GHz Mac mini on sale for $449, save $50
Best Buy has the 1.4GHz Mac mini on sale for $50 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Price for online orders only, in-store price may vary... Read more
12-inch 1.1GHz Gold MacBook on sale for $1149...
B&H Photo has the 12″ 1.1GHz Gold Retina MacBook on sale for $1149.99 including free shipping plus NY sales tax only. Their price is $150 off MSRP, and it’s the lowest price available for this... Read more
27-inch 3.3GHz 5K iMac on sale for $1849, sav...
Best Buy has the 27″ 3.3GHz 5K iMac on sale for $1849.99. Their price is $150 off MSRP, and it’s the lowest price available for this model. Choose free shipping or free local store pickup (if... Read more
Worldwide Tablet Shipments Expected to Declin...
Does Apple badly need a touchscreen convertible/hybrid laptop MacBook? Yes, judging from a new market forecast from the International Data Corporation (IDC) Worldwide Quarterly Tablet Tracker, which... Read more
Continued PC Shipment Shrinkage Expected Thro...
Worldwide PC shipments are expected to fall by -8.7 percent in 2015 and not stabilize until 2017, according to the latest International Data Corporation (IDC) Worldwide Quarterly PC Tracker data. The... Read more
Imminent iPhone 6s Announcement Leads To 103%...
NextWorth Solutions, with its online and in-store electronics trade-in programs including http://NextWorth.com, reports that it has experienced a 103 percent surge in quoted trade-in values over the... Read more
Weekend Deal: 13-inch Retina MacBook Pros for...
Save up to $100 on the purchase of a new 2015 13″ Retina MacBook Pro at the following resellers this weekend. Shipping is free with each model: 2.7GHz/128GB MSRP $1299 2.7GHz/... Read more
13-inch 2.5GHz MacBook Pro on sale for $999,...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $999.99 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Read more

Jobs Board

Product Design Engineer - *Apple* Watch - A...
**Job Summary** Product Design Engineer Job Description As a member of Apple 's Watch product design team, you will help to create the next generation of the world's Read more
*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Software QA Engineer, *Apple* Pay Security...
Changing the world is all in a day039s work at Apple . If you love innovation, here039s your chance to make a career of it. You039ll work hard. But the job comes with Read more
*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.