Upload
ipodaddict181
View
232
Download
0
Embed Size (px)
Citation preview
8/14/2019 A Guide to PHP
1/184
A guide to PHP
Part 1:
The Only Acronym You'll Ever NeedIf you're new to Web development, you could be forgiven for thinking that it
consists of no more than a mass of acronyms, each one more indecipherable
than the last. ASP, CGI, SOAP, XML, HTTP - the list seems never-ending, and
the sheer volume of information on each of these can discourage the most
avid programmer. But before you put on your running shoes and flee, there's
a little secret you should know. To put together a cutting-edge Web site,
chock full of all the latest bells and whistles, there's only one acronym you
reallyneed to know:
PHP
Now, while you have almost certainly heardof PHP, you may not be aware of
just how powerful the language is, and how much it can do for you. Today,
PHP has the enviable position of being the only open-source server-side
scripting language that's both fun and easy to learn. This is not just
advertising: recent surveys show that more than 16,000,000 Web sites use
PHP as a server side scripting language, and the language also tops the listof most popular Apache modules.
Why, you ask? The short answer: it's powerful, it's easy to use, and it's free.
Extremely robust and scalable, PHP can be used for the most demanding of
applications, and delivers excellent performance even at high loads. Built-in
8/14/2019 A Guide to PHP
2/184
database support means that you can begin creating data-driven
applications immediately, XML support makes it suitable for the new
generation of XML-enabled applications, and the extensible architecture
makes it easy for developers to use it as a framework to build their own
custom modules. Toss in a great manual, a knowledgeable developercommunity and a really low price (can you spell f-r-e-e?) and you've got the
makings of a winner!
My goal in this series of tutorials is very simple: I'll be teaching you the
basics of using PHP, and showing you why I think it's the best possible tool
for Web application development today. I'll be making no assumptions about
your level of knowledge, other than that you can understand basic HTML and
have a sense of humor. And before you ask... Yes, this series covers both
PHP 4 and PHP 5, with new PHP 5 features flagged for easy reference.
Let's get going!
The Right Environment
PHP is typically used in combination with a Web server like Apache. Requests
for PHP scripts are received by the Web server, and are handled by the PHP
interpreter. The results obtained after execution are returned to the Web
server, which takes care of transmitting them to the client browser. Within
the PHP script itself, the sky's the limit - your script can perform calculations,
process user input, interact with a database, read and write files... Basically,
anything you can do with a regular programming language, you can do
inside your PHP scripts.
From the above, it is clear that in order to begin using PHP, you need to have
a proper development environment set up.
This series will focus on using PHP with the Apache Web server on Linux, but
you can just as easily use PHP with Apache on Windows, UNIX and Mac OS.
Detailed instructions on how to set up this development environment on
each platform are available in the online manual, at http://www.php.net/
http://www.php.net/manual/en/installation.phphttp://www.php.net/manual/en/installation.phphttp://www.php.net/manual/en/installation.phphttp://www.php.net/manual/en/installation.php8/14/2019 A Guide to PHP
3/184
manual/en/installation.php - or you can just download a copy of PHP 5 from
http://www.php.net and read the installation instructions.
Go do that now, and come back when you've successfully installed and
tested PHP.
Start Me Up
There's one essential concept that you need to get your mind around before
we proceed further. Unlike CGI scripts, which require you to write code to
output HTML, PHP lets you embed PHP code in regular HTML pages, and
execute the embedded PHP code when the page is requested.
These embedded PHP commands are enclosed within special start and endtags, like this:
Here's a simple example that demonstrates how PHP and HTML can be
combined:
Agent: So who do you think you are, anyhow?
8/14/2019 A Guide to PHP
4/184
Not quite your traditional "Hello, World" program... but then again, I alwaysthought tradition was over-rated.
Save the above script to a location under your Web server document root,
with a .php extension, and browse to it. You'll see something like this:
Look at the HTML source:
8/14/2019 A Guide to PHP
5/184
Agent: So who do you think you are, anyhow?
Neo: I am Neo, but my people call me The One.
What just happened? When you requested the script above, Apache
intercepted your request and handed it off to PHP. PHP then parsed the
script, executing the code between the marks and replacing it
with the output of the code run. The result was then handed back to the
server and transmitted to the client. Since the output contained valid HTML,
the browser was able to render it for display to the user.
A close look at the script will reveal the basic syntactical rules of PHP. Every
PHP statement ends in a semi-colon. This convention is identical to that used
in Perl, and omitting the semi-colon is one of the most common mistakes
newbies make. That said, it is interesting to note that a semi-colon is not
needed to terminate the lastline of a PHP block. The PHP closing tag
includes a semi-colon, therefore the following is perfectly valid PHP code:
It's also possible to add comments to your PHP code, as I've done in the
example above. PHP supports both single-line and multi-line comment
blocks:
8/14/2019 A Guide to PHP
6/184
/* and this is a
multi-line
comment */
?>
Blank lines within the PHP tags are ignored by the parser. Everything outside
the tags is also ignored by the parser, and returned as-is. Only the code
between the tags is read and executed.
A Case of Identity
Variables are the bread and butter of every programming language... and
PHP has them too. A variable can be thought of as a programming constructused to store both numeric and non-numeric data; the contents of a variable
can be altered during program execution. Finally, variables can be compared
with each other, and you - the programmer - can write code that performs
specific actions on the basis of this comparison.
PHP supports a number of different variable types: integers, floating point
numbers, strings and arrays. In many languages, it's essential to specify the
variable type before using it: for example, a variable may need to be
specified as type integer or type array. Give PHP credit for a little
intelligence, though: it automagically determines variable type by the
context in which it is being used!
Every variable has a name. In PHP, a variable name is preceded by a dollar
($) symbol and must begin with a letter or underscore, optionally followed
by more letters, numbers and/or underscores. For example, $popeye, $one
and $INCOME are all valid PHP variable names, while $123 and $48hrs are
invalid.
Note that variable names in PHP are case sensitive, so $me is different from
$Me or $ME.
Here's a simple example that demonstrates PHP's variables:
8/14/2019 A Guide to PHP
7/184
Agent: So who do you think you are, anyhow?
Here, the variables $name, $rank and $serialNumber are first defined withstring and numeric values, and then substituted in the echo() function call.
The echo() function, along with the print() function, is commonly used to
print data to the standard output device (here, the browser). Notice that I've
included HTML tags within the call to echo(), and those have been rendered
by the browser in its output. You can do this too. Really.
An Equal Music
To assign a value to a variable, you use the assignment operator: the =symbol. This is used to assign a value (the right side of the equation) to a
variable (the left side). The value being assigned need not always be fixed; it
could also be another variable, an expression, or even an expression
involving other variables, as below:
8/14/2019 A Guide to PHP
8/184
Interestingly, you can also perform more than one assignment at a time.
Consider the following example, which assigns three variables the same
value simultaneously:
Not My Type
Every language has different types of variable - and PHP is no exception. The
language supports a wide variety of data types, including simple numeric,
character, string and Boolean types, and more complex arrays and objects.
Here's a quick list of the basic ones, with examples:
Boolean: The simplest variable type in PHP, a Boolean variable, simply
specifies a true or false value.
Integer: An integer is a plain-vanilla whole number like 75, -95, 2000
or 1.
8/14/2019 A Guide to PHP
9/184
Floating-point: A floating-point number is typically a fractional
number such as 12.5 or 3.141592653589. Floating point numbers may
be specified using either decimal or scientific notation.
String: A string is a sequence of characters, like "hello" or
"abracadabra". String values may be enclosed in either double quotes
("") or single quotes(''). (Quotation marks within the string itself can
be "escaped" with a backslash (\) character.) String values enclosed in
double quotes are automatically parsed for special characters and
variable names; if these are found, they are replaced with the
appropriate value. Here's an example:
To learn more about PHP's data types, visit http://www.php.net/manual/en/
language.types.php.
Market Value
If variables are the building blocks of a programming language, operators
are the glue that let you build something useful with them. You've alreadyseen one example of an operator - the assignment operator -, which lets you
assign a value to a variable. Since PHP believes in spoiling you, it also comes
with operators for arithmetic, string, comparison and logical operations.
http://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.phphttp://www.php.net/manual/en/language.types.php8/14/2019 A Guide to PHP
10/184
A good way to get familiar with operators is to use them to perform
arithmetic operations on variables, as in the following example:
Quantity
Cost price
Current price
Absolute change in price
Percent change in price
8/14/2019 A Guide to PHP
11/184
%
Looks complex? Don't be afraid - it's actually pretty simple. The meat of the
script is at the top, where I've set up variables for the unit cost and the
quantity. Next, I've performed a bunch of calculations using PHP's various
mathematical operators, and stored the results of those calculations in
different variables. The rest of the script is related to the display of the
resulting calculations in a neat table.
If you'd like, you can even perform an arithmetic operation simultaneously
with an assignment, by using the two operators together. The two code
snippets below are equivalent:
If you don't believe me, try echoing them both.
Stringing Things Along
8/14/2019 A Guide to PHP
12/184
Why stop with numbers? PHP also allows you to add strings with the string
concatenation operator, represented by a period (.). Take a look:
As before, you can concatenate and assign simultaneously, as below:
8/14/2019 A Guide to PHP
13/184
To learn more about PHP's arithmetic and string operators, visit http://
www.php.net/manual/en/language.operators.arithmetic.php and http://
www.php.net/manual/en/language.operators.string.php.
That's about it for this tutorial. You now know all about the basic buildingblocks and glue of PHP - its variables and operators. In Part Two of this
series, I'll be using these fundamental concepts to demonstrate PHP's
powerful form processing capabilities.
Part 2:
Not What You ExpectedIn Part One of this series, I gave you a brief introduction to PHP, and how it
fits into your Web application development environment. I also taught you
the basics of PHP variables, and showed you how to add, multiply and
concatenate them together.
Now that you know the basics, it's time to focus in on one of PHP's nicer
features - its ability to automatically receive user input from a Web form and
convert it into PHP variables. If you're used to writing Perl code to retrieveform values in your CGI scripts, PHP's simpler approach is going to make
you weep with joy. So get that handkerchief out, and scroll on down.
Form...
Forms have always been one of quickest and easiest ways to add
interactivity to your Web site. A form allows you to ask customers if they like
your products, casual visitors for comments on your site, and pretty girls for
their phone numbers. And PHP can simplify the task of processing the data
generated from a Web-based form substantially, as this first example
demonstrates. This example contains two scripts, one containing an HTML
form (named form.htm) and the other containing the form processing logic
(message.php). Here's form.htm:
http://devzone.zend.com/node/view/id/php101-1.phphttp://devzone.zend.com/node/view/id/626http://www.php.net/manual/en/language.operators.string.phphttp://www.php.net/manual/en/language.operators.string.phphttp://devzone.zend.com/node/view/id/php101-1.phphttp://devzone.zend.com/node/view/id/php101-1.phphttp://devzone.zend.com/node/view/id/626http://devzone.zend.com/node/view/id/626http://www.php.net/manual/en/language.operators.string.phphttp://www.php.net/manual/en/language.operators.string.phphttp://www.php.net/manual/en/language.operators.string.phphttp://www.php.net/manual/en/language.operators.string.phphttp://www.php.net/manual/en/language.operators.arithmetic.phphttp://www.php.net/manual/en/language.operators.arithmetic.phphttp://www.php.net/manual/en/language.operators.arithmetic.phphttp://www.php.net/manual/en/language.operators.arithmetic.php8/14/2019 A Guide to PHP
14/184
Enter your message:
The critical line in this page is the tag
...
As you probably already know, the "action" attribute of the tag
specifies the name of the server-side script (message.php in this case) that
will process the information entered into the form. The "method" attributespecifies howthe information will be passed.
...And Function
Now for the other half of the puzzle: the message.php script. This script
reads the data submitted by the user and "does something with it". Here is
message.php:
8/14/2019 A Guide to PHP
15/184
// retrieve form data
$input = $_POST['msg'];
// use it
echo "You said: $input";
?>
When you enter some data into form.htm (let's say "Boo"), and submit it,
the form processor message.php will read it and display it to you ("You
said: Boo"). Thus, whenever a form is submitted to a PHP script, all variable-
value pairs within that form automatically become available for use within
the script, through a special PHP container variable: $_POST. You can then
access the value of the form variable by using its "name" inside the $_POST
container, as I did in the script above.
Obviously, PHP also supports the GET method of form submission. All you
need to do is change the "method" attribute to "get", and retrieve values
from $_GET instead of$_POST. The $_GET and $_POST variables are
actually a special type of PHP animal called an array, which I'll be teaching
you about shortly. Don't worry too much about it at the moment, just makesure you're comfortable with retrieving simple values from a form with PHP,
and then scroll on down to learn about some more operators that are useful
in this context.
Operating With Extreme Caution
Thus far, the scripts we've discussed have been pretty dumb. All they've
done is add numbers and strings, and read back to you the data you typed
in yourself - not exactly overwhelming. In order to add some intelligence toyour scripts, you need to know how to construct what geeks call a
"conditional statement" - a statement which lets your script perform one of a
series of possible actions based on the result of a comparison test. And since
the basis of a conditional statement is comparison, you first need to know
8/14/2019 A Guide to PHP
16/184
how to compare two variables and determine whether they're identical or
different.
You've already seen some of PHP's arithmetic and string operators. However,
the language also comes with operators designed specifically to compare twovalues: the so-called "comparison operators". Here's an example that
demonstrates them in action:
8/14/2019 A Guide to PHP
17/184
right
// returns true here
$result = ($median >= $mode);
print "result is $result
";
// equality operator
// returns true if left side is equal to right
// returns true here
$result = ($mean == $mode);
print "result is $result
";
// not-equal-to operator
// returns true if left side is not equal to right
// returns false here
$result = ($mean != $mode);
print "result is $result
";
// inequality operator
// returns true if left side is not equal to right
// returns false here
$result = ($mean $mode);
print "result is $result";
?>
The result of a comparison test is always Boolean: either true (1) or false (0
- which doesn't print anything). This makes comparison operators an
indispensable part of your toolkit, as you can use them in combination with a
conditional statement to send a script down any of its multiple action paths.
PHP 4.0 also introduced a newcomparison operator, which allows you to test
both for equality and type: the === operator. The following example
demonstrates it:
8/14/2019 A Guide to PHP
18/184
/* define two variables */
$str = '10';
$int = 10;
/* returns true, since both variables contain the same
value */
$result = ($str == $int);
print "result is $result
";
/* returns false, since the variables are not of the same
type even though they have the same value */
$result = ($str === $int);
print "result is $result
";
/* returns true, since the variables are the same type and
value */
$anotherInt = 10;
$result = ($anotherInt === $int);
print "result is $result";
?>
Read more about PHP's comparison operators at http://www.php.net/
manual/en/language.operators.comparison.php.
A Question of Logic
In addition to the comparison operators I used so liberally above, PHP also
provides four logical operators, which are designed to group conditional
expressions together. These four operators - logical AND, logical OR, logicalXOR and logical NOT - are illustrated in the following example:
8/14/2019 A Guide to PHP
19/184
/* define some variables */
$auth = 1;
$status = 1;
$role = 4;
/* logical AND returns true if all conditions are true */
// returns true
$result = (($auth == 1) && ($status != 0));
print "result is $result
";
/* logical OR returns true if any condition is true */
// returns true
$result = (($status == 1) || ($role
Logical operators play an important role in building conditional statements,
as they can be used to link together related conditions simply and elegantly.
View more examples of how they can be used at http://www.php.net/
manual/en/language.operators.logical.php.
Older But Not Wiser
http://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.phphttp://www.php.net/manual/en/language.operators.logical.php8/14/2019 A Guide to PHP
20/184
Now that you've learnt all about comparison and logical operators, I can
teach you about conditional statements. As noted earlier, a conditional
statement allows you to test whether a specific condition is true or false, and
perform different actions on the basis of the result. In PHP, the simplest form
of conditional statement is the if() statement, which looks something likethis:
if (condition) {
do this!
}
The argument to if()is a conditional expression, which evaluates to either
true or false. If the statement evaluates to true, all PHP code within the curly
braces is executed; if it does not, the code within the curly braces is skipped
and the lines following the if() construct are executed.
Let me show you how the if() statement works by combining it with a
form. In this example, the user is asked to enter his or her age.
Enter your age:
Depending on whether the entered age is above or below 21, a different
message is displayed by the ageist.php script:
8/14/2019 A Guide to PHP
21/184
8/14/2019 A Guide to PHP
22/184
This construct can be used to great effect in the last example: we can
combine the two separate if()statements into a single if-else statement.
8/14/2019 A Guide to PHP
23/184
if ($numTries > 10) {
$msg = 'Blocking your account...';
}
else {
$msg = 'Welcome!';}
?>
You could also do this, which is equivalent (and a lot more fun):
PHP also lets you "nest" conditional statements inside each other. For
example, this is perfectly valid PHP code:
8/14/2019 A Guide to PHP
24/184
Another, more elegant way to write the above is with a series of logical
operators:
The Daily Special
PHP also provides you with a way of handling multiple possibilities: the if-
elseif-else construct. A typical if-elseif-else statement block would
look like this:
if (first condition is true) {
do this!
}
elseif (second condition is true) {
do this!
}
elseif (third condition is true) {
do this!
}
... and so on ...
else {do this!
}
And here's an example that demonstrates how to use it:
8/14/2019 A Guide to PHP
25/184
Today's Special
Monday/Wednesday
Tuesday/Thursday
Friday/Sunday
Saturday
As you can see, this is simply a form which allows you to pick a day of the
week. The real work is done by the PHP script cooking.php:
8/14/2019 A Guide to PHP
26/184
elseif ($day == 3) {
$special = 'Pork chops with mashed potatoes and green
salad';
}
else {$special = 'Fish and chips';
}
?>
Today's special is:
In this case, I've used the if-elseif-else control structure to assign a
different menu special to each combination of days. Note that as soon as
one of the if() branches within the block is found to be true, PHP will
execute the corresponding code, skip the remaining if() statements in the
block, and jump immediately to the lines following the entire if-elseif-
else block.
And that's it for now. To view more examples of conditional statements inaction, visit http://www.php.net/manual/en/language.control-
structures.php. In Part Three, I'll be bringing you more control structures,
more operators and more strange and wacky scripts - so make sure you
don't miss it!
Part 3:Going Deeper
If you've been paying attention, you remember that in Part Two I gave you a
quick crash course in PHP's basic control structures and operators. I also
showed you how PHP can be used to process the data entered into a Web
form. In this tutorial, I'm going to delve deeper into PHP's operators and
http://www.php.net/manual/en/language.control-structures.phphttp://devzone.zend.com/node/view/id/php101-2.phphttp://devzone.zend.com/node/view/id/php101-2.phphttp://devzone.zend.com/node/view/id/628http://devzone.zend.com/node/view/id/628http://www.php.net/manual/en/language.control-structures.phphttp://www.php.net/manual/en/language.control-structures.phphttp://www.php.net/manual/en/language.control-structures.phphttp://www.php.net/manual/en/language.control-structures.php8/14/2019 A Guide to PHP
27/184
control structures, showing you two new operators, an alternative to the if-
else() family of conditional statements, and some of PHP's more
interesting loops. So keep reading... this is just about to get interesting!
Switching Things AroundAn alternative to the if-else() family of control structures is PHP's
switch-case() statement, which does almost the same thing. It looks like
this:
switch (decision-variable) {
case first condition is true:
do this!
case second condition is true:do this!
... and so on...
}
Depending on the value of the decision variable, the appropriate case()
block is executed. A default block can also be created, to handle all those
occasions when the value of the decision variable does not match any of the
listed case() conditions.
I'll make this a little clearer by re-writing one of my earlier examples in
terms of the switch() statement:
8/14/2019 A Guide to PHP
28/184
case 1:
$special = 'Chicken in oyster sauce';
break;
case 2:
$special = 'French onion soup';break;
case 3:
$special = 'Pork chops with mashed potatoes and
green salad';
break;
default:
$special = 'Fish and chips';
break;
}
?>
Today's special is:
There are a couple of important keywords here:
The break keyword is used to break out of the switch() statement
block and move immediately to the lines following it.
The default keyword is used to execute a default set of statements
when the variable passed to switch() does not satisfy any of the
conditions listed within the block.
A common newbie mistake here is to forget the break at the end of every
case() block. Remember that if you forget to break out of a case() block,
PHP will continue executing the code in all the subsequent case() blocks it
encounters.
For more on the switch() statement, see http://www.php.net/manual/en/
control-structures.switch.php.
http://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.phphttp://www.php.net/manual/en/control-structures.switch.php8/14/2019 A Guide to PHP
29/184
Creative Conditionals
Normally, when creating and processing forms in PHP, you would place the
HTML form in one file, and handle form processing through a separate PHP
script. However, with the power of conditional statements at your disposal,
you can combine both pages into one.
How do you do this? Simple. All you need to do is assign a name to the form
submit control, and then check whether the special $_POST container
variable contains that name when the script first loads up. If it does, the
form has already been submitted, and you can process the data; if it does
not, that the user has not submitted the form and you therefore need to
generate the initial, unfilled form. Thus, by testing for the presence or
absence of this submit variable, a clever PHP programmer can use a singlePHP script to generate both the initial form, and the output after it has been
submitted, as appropriate.
Here's a simple example:
8/14/2019 A Guide to PHP
30/184
}
else {
/* if the "submit" variable exists, the form has been
submitted - look for and process form data */
// display result $age = $_POST['age'];
if ($age >= 21) {
echo 'Come on in, we have alcohol and music
awaiting you!';
}
else {
echo 'You're too young for this club, come back
when you're a little older';
}
}
?>
As you can see, the script contains two pages: the initial, empty form and
the result page generated after hitting the submit button. In order to decidewhich page to display, the script first tests for the presence of the
$_POST['submit'] variable. If it doesn't find it, it assumes that the form
has yet to be submitted, and displays the initial list of days. Once the form
has been submitted, the same script will be called to process the form input.
This time, however, the $_POST['submit'] variable willbe set, and so PHP
will not display the initial page, but rather the page containing the result
message.
Note that for this to work, your submit button must have a value assigned
to its "name" attribute, and you must check for that value in the primary
conditional statement. And in case you were wondering, the $_SERVER array
is a special PHP variable which always holds server information, including the
path and name of the currently executing script.
8/14/2019 A Guide to PHP
31/184
Next up, loops.
One by One
For those of you unfamiliar with the term, a loop is a control structure that
enables you to repeat the same set of php
statements or commands over and over again (the actual number of
repetitions can be a number you specify, or depend on the fulfillment of one
or more conditions).
Now, last time out you saw a few comparison and logical operators, which
help in building conditional statements. Since this segment of the tutorial is
going to focus on loops, this is an appropriate time to introduce you to PHP's
auto-increment and auto-decrement operators, which see a lot of use in thiscontext.
The auto-increment operator is a PHP operator designed to automatically
increment the value of the variable it is attached to by 1. It is represented
by two "plus" signs (++). This snippet of code should explain it:
Thus, $total++ is functionally equivalent to $total = $total + 1.
There's a corresponding auto-decrement operator (--), which does exactly
the opposite:
8/14/2019 A Guide to PHP
32/184
These operators are frequently used in loops, to update the value of the loop
counter, speaking ofwhich...
Being Square
The first - and simplest - loop to learn in PHP is the so-called while() loop,
which looks like this:
while (condition is true) {
do this!
}
In this case, so long as the condition specified evaluates as true - remember
what you learned in Part Two? - the PHP statements within the curly braces
will continue to execute. As soon as the condition becomes false, the loop
will be broken and the statements following it will be executed.
Here's a quick example which demonstrates the while() loop:
Print all the squares between 1 and
http://devzone.zend.com/node/view/id/php101-2.phphttp://devzone.zend.com/node/view/id/php101-2.phphttp://devzone.zend.com/node/view/id/php101-2.phphttp://devzone.zend.com/node/view/id/php101-2.php8/14/2019 A Guide to PHP
33/184
This is a simple form which asks the user to enter a number. When the form
is submitted, the PHP script that is invoked should take this number and
print the squares of all the numbers between 1 and the entered value. With
a while() loop, this is simplicity itself:
This script uses a while() loop to count forwards from 1 until the values of
$lowerLimit and $upperLimit are equal.
Loop First, Ask Questions Later
8/14/2019 A Guide to PHP
34/184
The while() loop executes a set of statements while a specified condition is
true. But what happens if the condition is true on the first iteration of the
loop itself? In the previous example, if you were to enter the value 0in the
form, the while() loop would not execute even once. Try it yourself and
you'll see what I mean.
If you're in a situation where you need to execute a set of statements *at
least* once, PHP offers you the do-while() loop. Here's what it looks like:
do {
do this!
} while (condition is true)
Let's take a quick example to better understand the difference between
while() and do-while():
In this case, no matter how many times you run this PHP script, you will get
no output at all, since the value of$x is not equal to 700. But, if you ran this
version of the script:
8/14/2019 A Guide to PHP
35/184
echo "Running...";
break;
} while ($x == 700);
?>
you would see one line of output, as the code within the do() block would
run once.
Let's now revise the previous PHP script so that it runs at least once,
regardless of what value is entered into the form:
Thus, the construction of the do-while() loop is such that the statements
within the loop are executed first, and the condition to be tested is checked
8/14/2019 A Guide to PHP
36/184
afterwards. This implies that the statements within the curly braces would be
executed at least once.
Read more about the while() and do-while() loops at http://
www.php.net/manual/en/control-structures.while.php and http://www.php.net/manual/en/control-structures.do.while.php.
Doing it by Numbers
Both the while() and do-while() loops continue to iterate for as long as
the specified conditional expression remains true. But what if you need to
execute a certain set of statements a specific number of times - for example,
printing a series of thirteen sequential numbers, or repeating a particular set
of cells five times? In such cases, clever programmers reach for thefor() loop...
The for() loop typically looks like this:
for (initial value of counter; condition; new value of
counter) {
do this!
}
Looks like gibberish? Well, hang in there for a minute...the "counter" here is
a PHP variable that is initialized to a numeric value, and keeps track of the
number of times the loop is executed. Before each execution of the loop, the
"condition" is tested. If it evaluates to true, the loop will execute once more
and the counter will be appropriately incremented; if it evaluates to false,
the loop will be broken and the lines following it will be executed instead.
Here's a simple example that demonstrates how this loop can be used:
http://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.do.while.phphttp://www.php.net/manual/en/control-structures.while.phphttp://www.php.net/manual/en/control-structures.while.phphttp://www.php.net/manual/en/control-structures.while.phphttp://www.php.net/manual/en/control-structures.while.php8/14/2019 A Guide to PHP
37/184
The first thing I've done here is define the number to be used for the
multiplication table. I've used 13 here - for no reason other than that it
rhymes with "green".
Next, I've constructed a for() loop with $x as the counter variable,initialized it to 1. and specified that the loop should run no more than 10
times. The auto-increment operator (discussed earlier) automatically
increments the counter by 1 every time the loop is executed. Within the
loop, the counter is multiplied by the number, to create the multiplication
table, and echo() is used to display the result on the page.
Turning the Tables
As you just saw, a for() loop is a very interesting - and useful -programming construct. The next example illustrates its usefulness in a
manner that should endear it to any HTML programmer.
8/14/2019 A Guide to PHP
38/184
8/14/2019 A Guide to PHP
39/184
formatted, with line breaks at the end of every table cell and row. This magic
is accomplished by forcing a carriage return with in every call to echo().
For more examples of the for() loop in action, visit http://www.php.net/
manual/en/control-structures.for.php.
Loops are frequently used in combination with one of PHP's more complex
data types, the animal known as the array. That's a whole topic in itself, and
in fact I'm going to discuss it in detail in the next segment of this tutorial.
Then I'm going to show you how arrays, loops and forms all work together
to make the creation of complex Web forms as easy as eating pie. All that
and more in Part Four!
Part 4:A Big Mistake
Having spent lots of time travelling around the outer landscape of PHP -
learning all about control structures, operators and variables - you're
probably bored. You might even be thinking of dropping out right now, and
instead spending your time more constructively (or so you think) in front ofthe idiot box.
That would be a big mistake. And when I say big, I mean humongous.
You see, if you forego this segment of the tutorial for the dubious charms of
Ally McBeal, you're going to miss out on one of PHP's coolest variable types.
It's a little thing called an array, and I'm not exaggerating when I tell you
that once you're on speaking terms with it, you're never going to look at a
PHP script the same way again. But hey, don't take my word for it... toss
that remote aside and come see for yourself!
Fruity Pizza
Thus far, the variables we've discussed contained only a single value, such
as:
http://devzone.zend.com/node/view/id/635http://www.php.net/manual/en/control-structures.for.phphttp://www.php.net/manual/en/control-structures.for.phphttp://devzone.zend.com/node/view/id/635http://devzone.zend.com/node/view/id/635http://www.php.net/manual/en/control-structures.for.phphttp://www.php.net/manual/en/control-structures.for.phphttp://www.php.net/manual/en/control-structures.for.phphttp://www.php.net/manual/en/control-structures.for.php8/14/2019 A Guide to PHP
40/184
However, array variables are a different kettle of fish altogether. An array is
a complex variable that allows you to store multiple values in a single
variable (which is handy when you need to store and represent related
information). Think of the array variable as a "container" variable, which can
contain one or more values. For example:
Here, $pizzaToppings is an array variable, which contains the values
'onion', 'tomato', 'cheese', 'anchovies', 'ham' and 'pepperoni'.
(Array variables are particularly useful for grouping related values together.)
print_r() is a special function that allows you to take a sneak peek inside
an array. It's more useful for debugging (finding out why your script doesn't
work) than it is for display purposes, but I'll use it here so you can see
what's going on under the surface. You do have your server running and
your browser open, right?
The various elements of the array are accessed via an index number, with
the first element starting at zero. So, to access the element 'onion', you
would use the notation $pizzaToppings[0], while 'anchovies' would be
http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.php8/14/2019 A Guide to PHP
41/184
$pizzaToppings[3] - essentially, the array variable name followed by the
index number enclosed within square braces.
PHP also allows you to replace indices with user-defined "keys", in order to
create a slightly different type of array. Each key is unique, and correspondsto a single value within the array.
In this case, $fruits is an array variable containing four key-value pairs.
(The => symbol is used to indicate the association between a key and its
value.) In order to access the value 'banana', you would use the notation
$fruits['yellow'], while the value 'grape' would be accessible via the
notation $fruits['green'].
This type of array is sometimes referred to as a "hash" or "associative
array". If you've ever used Perl, you'll see the similarities to the Perl hash
variable.
Eating Italian
The simplest was to define an array variable is the array() function. Here's
how:
8/14/2019 A Guide to PHP
42/184
$pasta = array('spaghetti', 'penne', 'macaroni');
?>
The rules for choosing an array variable name are the same as those for anyother PHP variable: it must begin with a letter or underscore, and can
optionally be followed by more letters, numbers and underscores.
Alternatively, you can define an array by specifying values for each element
in the index notation, like this:
If you're someone who prefers to use keys rather than default numericindices, you might prefer the following example:
8/14/2019 A Guide to PHP
43/184
You can add elements to the array in a similar manner. For example, if you
wanted to add the element 'green olives' to the $pizzaToppings array,
you would use something like this:
In order to modify an element of an array, simply assign a new value to the
corresponding scalar variable. If you wanted to replace 'ham' with
'chicken', you'd use:
You can do the same using keys. The following statement modifies the
element with the key 'lunch' to a different value:
Push And Pull
8/14/2019 A Guide to PHP
44/184
You can also add an element to the end of an existing array with the
array_push() function:
And you can remove an element from the end of an array using the
interestingly-named array_pop() function.
If you need to pop an element off the top of the array, you can use the
array_shift() function:
http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-pop.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-push.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-pop.phphttp://devzone.zend.com/manual/function.array-pop.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-push.phphttp://devzone.zend.com/manual/function.array-push.php8/14/2019 A Guide to PHP
45/184
And the array_unshift() function takes care of adding elements to the
beginning of the array.
The array_push() and array_unshift() functions don't work with
associative arrays; to add elements to these arrays, it's better to use the
$arr[$key] = $value notation to add new values to the array.
The explode() function splits a string into smaller components, based on a
user-specified delimiter, and returns the pieces as elements as an array.
http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-unshift.phphttp://devzone.zend.com/manual/function.array-unshift.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-shift.phphttp://devzone.zend.com/manual/function.array-shift.php8/14/2019 A Guide to PHP
46/184
To do the reverse, you can use the implode() function, which creates a
single string from all the elements of an array by joining them together with
a user-defined delimiter. Reversing the example above, we have:
Finally, the two examples below show how the sort() and
rsort()functions can be used to sort an array alphabetically (or
numerically), in ascending and descending order respectively:
http://devzone.zend.com/manual/function.implode.phphttp://devzone.zend.com/manual/function.implode.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.explode.phphttp://devzone.zend.com/manual/function.explode.php8/14/2019 A Guide to PHP
47/184
Looping the Loop
So that takes care of putting data inside an array. Now, how about getting it
out?
Retrieving data from an array is pretty simple: all you need to do is access
the appropriate element of the array using its index number. To read an
entire array you simply loop over it, using any of the loop constructs you
learned about in Part Three of this tutorial.
How about a quick example?
My favourite bands are:
http://devzone.zend.com/node/view/id/628http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.rsort.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/node/view/id/628http://devzone.zend.com/node/view/id/628http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.rsort.phphttp://devzone.zend.com/manual/function.rsort.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.sort.phphttp://devzone.zend.com/manual/function.sort.php8/14/2019 A Guide to PHP
48/184
When you run this script, here's what you'll see:
My favourite bands are:
MetallicaEvanescence
Linkin Park
Guns n Roses
In this case, I've defined an array, and then used the for() loop to: run
through it, extract the elements using the index notation, and display them
one after the other.
I'll draw your attention here to the sizeof() function. This function is one
of the most important and commonly used array functions. It returns the
size of (read: number of elements within) the array. It is mostly used in loop
counters to ensure that the loop iterates as many times as there are
elements in the array.
http://devzone.zend.com/manual/function.sizeof.phphttp://devzone.zend.com/manual/function.sizeof.php8/14/2019 A Guide to PHP
49/184
If you're using an associative array, the array_keys() and
array_values()functions come in handy, to get a list of all the keys and
values within the array.
What's That Noise?
There is, however, a simpler way of extracting all the elements of an array.
PHP 4.0 introduced a spanking-new loop type designed specifically for the
purpose of iterating over an array: the foreach() loop. (It is similar in
syntax to the Perl construct of the same name.) Here's what it looks like:
foreach ($array as $temp) {
do this!
}
http://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-values.phphttp://devzone.zend.com/manual/function.array-values.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.print-r.phphttp://devzone.zend.com/manual/function.array-keys.phphttp://devzone.zend.com/manual/function.array-keys.php8/14/2019 A Guide to PHP
50/184
A foreach() loop runs once for each element of the array passed to it as
argument, moving forward through the array on each iteration. Unlike a
for() loop, it doesn't need a counter or a call to sizeof(), because it
keeps track of its position in the array automatically. On each run, the
statements within the curly braces are executed, and the currently-selectedarray element is made available through a temporary loop variable.
To better understand how this works, consider this rewrite of the previous
example, using the foreach() loop:
My favourite bands are:
Each time the loop executes, it places the currently-selected array element
in the temporary variable $a. This variable can then be used by the
8/14/2019 A Guide to PHP
51/184
statements inside the loop block. Since a foreach() loop doesn't need a
counter to keep track of where it is in the array, it is lower-maintenance and
also much easier to read than a standard for() loop. Oh yeah... and it also
works with associative arrays, with no extra programming needed.
Music for the Masses
In addition to their obvious uses, arrays and loops also come in handy when
processing forms in PHP. For example, if you have a group of related
checkboxes or a multi-select list, you can use an array to capture all the
selected form values in a single variable, to simplify processing. Consider the
following example, which illustrates this:
8/14/2019 A Guide to PHP
52/184
Crosby, Stills & Nash
When the above form is submitted, PHP will automatically create an array
variable, and populate it with the items selected. This array can then be
processed with a foreach() loop, and the selected items retrieved from it.
You can do this with a multi-select list also, simply by using array notation in
the select control's "name" attribute. Try it out for yourself and see... and
make sure you tune in for the next PHP 101 tutorial, same time, same
channel.
http://devzone.zend.com/node/view/id/636http://devzone.zend.com/node/view/id/636http://devzone.zend.com/manual/function.is-array.phphttp://devzone.zend.com/manual/function.is-array.php8/14/2019 A Guide to PHP
53/184
Part 5:Back to School
When you first started reading this series, I promised you that you'd have a
whole lot of fun. If you're the cynical type, you may be feeling that I didn't
keep my promise. After all, how much fun have you reallyhad so far? All
you've done is learn a bunch of theoretical rules, added and subtracted
numbers from each other, learnt primitive decision-making and gone round
and round in the circular funhouse of loops. Heck, if this wasn't a PHP
tutorial, it would be kindergarten...
I hear you.
In this segment of our ongoing saga, I'm going to teach you how to do
something that's definitely not for kids. It involves getting down and dirty
with files on the disk: meeting them (shock!), reading their contents
(shriek!) and (horror of horrors!) writing data to them. All of these exciting
activities will take place under the aegis of PHP's very cool file manipulation
API, which allows you to view and modify file attributes, read and list
directory contents, alter file permissions, retrieve file contents into a varietyof native data structures, and search for files based on specific patterns.
Let's get started!
Handle With Care
I'll begin with something simple: opening a file and reading its contents.
Let's assume that somewhere on your disk, hidden under /usr/local/stuff/
that/should/be/elsewhere/recipes/, you have a text file containing the recipe
for the perfect Spanish omelette. You now wish to read the contents of this
file into a PHP script.
In order to do this, there are three distinct steps to be followed:
Open the file and assign it a file handle.
8/14/2019 A Guide to PHP
54/184
8/14/2019 A Guide to PHP
55/184
'r' - opens a file in read mode
'w' - opens a file in write mode, destroying existing file contents
'a' - opens a file in append mode, preserving existing file contents
Interact with the file via its handle and extract its contents into a
PHP variable
If the fopen() function is successful, it returns a file handle, $fh, which can
be used for further interaction with the file. This file handle is used by the
fread() function, which reads the file and places its contents into a
variable.
The second argument to fread() is the number of bytes to be read. You
can usually obtain this information through the filesize() function, which
- who'd have guessed it?!- returns the size of the file in bytes.
Close the file
This last step is not strictly necessary as PHP closes the file automatically
once it reaches the end of the script, but it's a good habit to develop.
Explicitly closing the file with fclose() has two advantages: it ties up loose
ends in your script, and it wins you lots of good karma from the PHP
community.
You probably haven't see the die() function before, either. This function is
mostly used as a primitive error-handling mechanism. In the event of a fatal
error, such as the file path being invalid or the file permissions being such
that PHP cannot read it, die() terminates script processing and optionally
displays a user-specified error message indicating why it committed suicide.
Different Strokes
An alternative method of reading data from a file is the very cool file()
function, which reads the entire file into an array (remember them?) with
one line of code. Each element of the array then contains one line from the
8/14/2019 A Guide to PHP
56/184
file. To display the contents of the file, simply iterate over the array in a
foreach() loop and print each element.
The following example demonstrates:
In this example, the file() command opens the file, reads it into an array
and closes the file - all in one, single, elegant movement. Each element ofthe array now corresponds to a line from the file. It's easy to print the file's
contents now -just reach for that mainstay of array processing, the
foreach() loop.
Don't want the data in an array? Try the file_get_contents() function,
new in PHP 4.3.0 and PHP 5.0, which reads the entire file into a string:
8/14/2019 A Guide to PHP
57/184
$data = file_get_contents($file) or die('Could not read
file!');
// print contents
echo $data;
?>
Who am I kidding? I always use the one-line functions noted above instead
of the three-line sequence offopen(), fread() and fclose(). Laziness
conquers all.
When Laziness is a Virtue
PHP also offers two very useful functions to import files into a PHP script: theinclude() and require()functions. These functions can be used to suck
external files lock, stock and barrel into a PHP script, which is very handy if,
for example, you have a modular application which has its code broken down
across files in separate locations.
The best way to understand the utility of the include() and require()
functions is with an example. Assume that on your Web site you have a
standard menu bar at the top of every page, and a standard copyright notice
in the bottom. Instead of copying and pasting the header and footer code on
each individual page, PHP gurus simply create separate files for the header
and footer, and import them at the top and bottom of each script. This also
makes a change to the site design easier to implement: instead of manually
editing a gazillion files, you simply edit two, and the changes are reflected
across your entire site instantaneously.
Let's see a real live example of this in action. Create the header in one file,
called header.php:
http://devzone.zend.com/manual/function.file-get-contents.phphttp://devzone.zend.com/manual/function.file-get-contents.php8/14/2019 A Guide to PHP
58/184
Home
Site Map
Search
Help
Next, create the footer with the copyright notice in a second file,
footer.php:
Your usage of this site is subject to its published
terms and conditions. Data iscopyright Big Company Inc, 1995-
Finally, create a script to display the main content of your site, and
include() the header and footer at appropriate places:
8/14/2019 A Guide to PHP
59/184
/* once the file is imported, the variables set above will
become available to it */
// include the page header
include('header.php');
?>
Now, when you run the script above, PHP will automatically read in the
header and footer files, merge them with the HTML content, and display the
complete page to you. Simple, isn't it?
Notice that you can even write PHP code inside the files being imported.When the file is first read in, the parser will look for tags, and
automatically execute the code inside it. (If you're familiar with JavaScript,
you can use this feature to replicate functionality similar to that of the
onLoad() page event handler in JavaScript.)
PHP also offers the require_once() and include_once()functions, which
ensure that a file which has already been read is not read again. This can
come in handy if you have a situation in which you want to eliminate
multiple reads of the same include file, either for performance reasons or to
avoid corruption of the variable space.
A quick note on the difference between the include() and
require()functions: the require()function returns a fatal error if the
named file cannot be found and halts script processing, while the
8/14/2019 A Guide to PHP
60/184
include() function returns a warning but allows script processing to
continue.
Writing to Ma
After everything you've just read, you've probably realized that reading a file
is not exactly brain surgery. So let's proceed to something slightly more
difficult - writing to a file.
The steps involved in writing data to a file are almost identical to those
involved in reading it: open the file and obtain a file handle, use the file
handle to write data to it, and close the file. There are two differences: first,
you must fopen() the file in write mode ('w' for write), and second,
instead of using the fread() function to read from the file handle, use thefwrite() function to write to it. Take a look:
When you run this script, it should create a file named dump.txt in /tmp,
and write a line of text to it, with a carriage return at the end. Notice that
double quotes are needed to convert into a carriage return.
http://devzone.zend.com/manual/function.fclose.phphttp://devzone.zend.com/manual/function.fwrite.phphttp://devzone.zend.com/manual/function.fopen.phphttp://devzone.zend.com/manual/function.fopen.phphttp://devzone.zend.com/manual/function.fclose.phphttp://devzone.zend.com/manual/function.fclose.phphttp://devzone.zend.com/manual/function.fwrite.phphttp://devzone.zend.com/manual/function.fwrite.phphttp://devzone.zend.com/manual/function.fopen.phphttp://devzone.zend.com/manual/function.fopen.php8/14/2019 A Guide to PHP
61/184
The fopen(), fwrite() and fread() functions are all binary-safe, which
means you can use them on binary files without worrying about damage to
the file contents. Read more about many of the issues related to binary-safe
file manipulation on different platforms at http://www.php.net/manual/en/
function.fopen.php.
If I've spoiled you by showing you the one-line shortcut functions for file
reads, let me damage you further by introducing you to the
file_put_contents() function, new in PHP 5.0, which takes a string and
writes it to a file in a single line of code.
Bear in mind that the directory in which you're trying to create the file must
exist before you can write to it. Forgetting this important step is a common
cause of script errors.
Information is Power
PHP also comes with a bunch of functions that allow you to test the status of
a file - for example to find out whether it exists, whether it's empty, whether
it's readable or writable, and whether it's a binary or text file. Of these, themost commonly used operator is the file_exists() function, which is
used to test for the existence of a specific file.
Here's an example which asks the user to enter the path to a file in a Web
form, and then returns a message displaying whether or not the file exists:
http://devzone.zend.com/manual/function.file-put-contents.phphttp://devzone.zend.com/manual/function.file-put-contents.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.phphttp://devzone.zend.com/manual/function.file-put-contents.phphttp://devzone.zend.com/manual/function.file-put-contents.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.phphttp://www.php.net/manual/en/function.fopen.php8/14/2019 A Guide to PHP
62/184
8/14/2019 A Guide to PHP
63/184
There are many more such functions. Here's a brief list, followed by an
example that builds on the previous one to provide more information on the
file specified by the user.
is_dir() - returns a Boolean indicating whether the specified path isa directory
is_file() - returns a Boolean indicating whether the specified file is
a regular file
is_link() - returns a Boolean indicating whether the specified file is
a symbolic link
is_executable() - returns a Boolean indicating whether the
specified file is executable
is_readable()- returns a Boolean indicating whether the specified
file is readable
is_writable()- returns a Boolean indicating whether the specified
file is writable
filesize() - gets size of file
filemtime() - gets last modification time of file
filamtime() - gets last access time of file
fileowner() - gets file owner
filegroup() - gets file group
fileperms() - gets file permissionsfiletype() - gets file type
This script asks for a file name as input and uses the functions above to
return information on it.
8/14/2019 A Guide to PHP
64/184
8/14/2019 A Guide to PHP
65/184
echo 'File is a directory
';
}
// is it a file?
if (is_file($_POST['file'])) {
echo 'File is a regular file
';}
// is it a link?
if (is_link($_POST['file'])) {
echo 'File is a symbolic link
';
}
// is it executable?
if (is_executable($_POST['file'])) {
echo 'File is executable
';
}
// is it readable?
if (is_readable($_POST['file'])) {
echo 'File is readable
';
}
// is it writable?
if (is_writable($_POST['file'])) {
echo 'File is writable
';
}}
else {
echo'File does not exist!
';
}
}
?>
And here's what the output might look like:
File name: /usr/local/apache/logs/error_log
File size: 53898 bytes
http://devzone.zend.com/manual/function.is-writable.phphttp://devzone.zend.com/manual/function.is-writable.phphttp://devzone.zend.com/manual/function.is-readable.phphttp://devzone.zend.com/manual/function.is-readable.phphttp://devzone.zend.com/manual/function.is-executable.phphttp://devzone.zend.com/manual/function.is-executable.phphttp://devzone.zend.com/manual/function.is-file.phphttp://devzone.zend.com/manual/function.is-writable.phphttp://devzone.zend.com/manual/function.is-writable.phphttp://devzone.zend.com/manual/function.is-readable.phphttp://devzone.zend.com/manual/function.is-readable.phphttp://devzone.zend.com/manual/function.is-executable.phphttp://devzone.zend.com/manual/function.is-executable.phphttp://devzone.zend.com/manual/function.is-link.phphttp://devzone.zend.com/manual/function.is-link.phphttp://devzone.zend.com/manual/function.is-file.phphttp://devzone.zend.com/manual/function.is-file.php8/14/2019 A Guide to PHP
66/184
File owner: 0
File group: 0
File permissions: 33188
File type: file
File last accessed on: 2004-05-26File last modified on: 2004-06-20
File is a regular file
File is readable
Breaking Eggs
So now you know how to read a file, write to it, and test its status. Let's look
at some examples of what you can do with this new-found power.
Let's go back to my Spanish omelette recipe. Let's suppose I'm feeling
generous, and I decide that I'd like to hear what people reallythink about
my culinary skills. Since I have a bunch of recipes that I'd like to share with
people, and since they all look something like this:
SPANISH OMELETTE
INGREDIENTS:
- 1 chopped onion
- 1 chopped tomato
- 1/2 chopped green pepper
- 4 beaten eggs
- Salt and pepper to taste
METHOD:
1. Fry onions in a pan
2. Pour beaten eggs over onions and fry gently
3. Add tomatoes, green pepper, salt and pepper to taste4. Serve with toast or bread
I need a quick way to convert them all into HTML so that they look
presentable on my Web site. We've already established that I'm lazy, so
8/14/2019 A Guide to PHP
67/184
fuggedaboutme re-creating the recipes in HTML. Instead, I'll have PHP do
the heavy lifting for me:
I've used the file() function to read the recipe into an array, and assign
the first line (the title) to a variable. That title is then printed at the top of
the page. Since the rest of the data is fairly presentable as is, I can simply
print the lines to the screen one after the other. Line breaks are
automatically handled for me by the extremely cool nl2br() function, which
converts regular text linebreaks into the HTML equivalent,
the
tag.
8/14/2019 A Guide to PHP
68/184
The end result: an HTML-ized version of my recipe that the world can marvel
at. Take a look:
SPANISH OMELETTE
INGREDIENTS:
- 1 chopped onion
- 1 chopped tomato
- 1/2 chopped green pepper
- 4 beaten eggs
- Salt and pepper to taste
METHOD:
1. Fry onions in a pan
2. Pour beaten eggs over onions and fry gently
3. Add tomatoes, green pepper, salt and pepper to
taste
4. Serve with toast or bread
If the elegance and creative simplicity of my Spanish omelette recipe has left
you speechless, I'm not surprised - many people feel that way. Until you get
your voice back: Ciao... and make sure you come back to work through Part
Six of PHP 101, which discusses creating your own reusable functions.
Part 6:A Little Knowledge
http://devzone.zend.com/node/view/id/637http://devzone.zend.com/node/view/id/637http://devzone.zend.com/node/view/id/637http://devzone.zend.com/node/view/id/637http://devzone.zend.com/node/view/id/6378/14/2019 A Guide to PHP
69/184
If you've been taking your regular dose of PHP 101, you know now enough
about PHP to write simple programs of your own. However, these programs
will be "procedural" or linear - the statements in them will be executed
sequentially, one after another - simply because that's the only programming
style I've used so far.
You know what they say about a little knowledge being a dangerous thing...
as your PHP scripts become more and more complex, it's only a matter of
time before you bump your head against the constraints of the procedural
method, and begin looking for a more efficient way of structuring your PHP
programs.
That's where Part Six of PHP 101 comes in. In this tutorial I'm going to
introduce you to a new way of doing things, where code doesn't run in a
straight line, but twists, leaps and bounds across the landscape of your
script. Most of this activity is accomplished through a programming construct
called a "function", and this tutorial teaches you how to build them (once),
use them (many times), pass them arguments and have them return values,
and generally make your scripts more compact, efficient and maintainable.
In Plain English
Ask a geek to define the term "function", and he'll probably mumble
something about a function being "a block of statements that can be
grouped together as a named entity." Since this is a tutorial on PHP, not an
introductory course in Greek, I'll translate that for you: a function is simply a
set of program statements which perform a specific task, and which can be
"called", or executed, from anywhere in your program.
Every programming language comes with its own built-in functions, and
typically also allows developers to define their own functions. For example, if
I had a profit statement for the year on my desk, and I wanted to inflate
each number by 35%, I could call my neighborhood accounting firm and get
them to do it for me... or I could write a simple PHP function called
8/14/2019 A Guide to PHP
70/184
cheatTheShareholders() and have it do the work for me (it's faster, plus
PHP doesn't bill by the hour).
There are three important reasons why functions are a Good Thing. First:
user-defined functions allow you to separate your code into easilyidentifiable subsections - which are easier to understand and debug. Second:
functions make your program modular, allowing you to write a piece of code
once and then re-use it multiple times within the same program. And third:
functions simplify code updates or changes, because the change needs only
to be implemented in a single place (the function definition). Functions thus
save time, money and electrons... and I know the electrons at least will
thank you!
Monday Morning Blues
To see how a function works, look at the following example:
8/14/2019 A Guide to PHP
71/184
// at the party
echo "Hi, haven't I seen you somewhere before?
";
myStandardResponse();
?>
Here's what the output might look like:
Hey lady, can you spare a dime?
Get lost, jerk!
Can you handle Joe's workload, in addition to your own,
while he's in Tahiti for a month?
You'll probably need to come in early and work till
midnight, but we are confident you can
handle it. Oh, and we can't pay you extra because of
budgetary constraints...
Get lost, jerk!
Hi, haven't I seen you somewhere before?
Get lost, jerk!(Sure it's rude, but it does demonstrate how a function allows you to reuse
pieces of code.)
The first thing I've done in the script above is define a new function, with the
function keyword. This keyword is followed by the name of the function,
which in this case is myStandardResponse(). All the program code
attached to that function is then placed within a pair of curly braces - and
this program code can contain loops, conditional statements, calls to other
user-defined functions, or calls to other PHP functions.
Of course, defining a function is only half of the puzzle; for it to be of any
use at all, you need to "invoke" it. In PHP, as in a million other languages,
this is accomplished by calling the function by its name, as I've done in the
example above. Calling a user-defined function is identical to calling a built-
in PHP function like echo() or explode().
8/14/2019 A Guide to PHP
72/184
Here's the typical format for a function:
function function_name (optional function arguments) {
statement 1...
statement 2...
.
.
.
statement n...
}
Having an Argument... or Two
Functions like the one you saw in the previous section print the same value
every time you invoke them. While this is interesting the first six times, itcan get boring on the seventh. What we need to do, to make these boring,
unintelligent functions a little more exciting, is get them to return a different
value each time they are invoked.
Enter arguments.
Arguments work by using a placeholder to represent a certain variable within
a function. Values for this variable are provided to the function at run-time
from the main program. Since the input to the function will differ at each
invocation, so will the output.
To see how this works, look at the following function, which accepts a single
argument and then prints it back after a calculation:
8/14/2019 A Guide to PHP
73/184
// call a function with an argument
getCircumference(10);
// call the same function with another argument
getCircumference(20);
?>
In this example, when the getCircumference() function is called with an
argument, the argument is assigned to the placeholder variable $radius
within the function, and then acted upon by the code within the function
definition.
It's also possible to pass more than one argument to a function. This is done
using a comma-separated list, as the following example shows:
8/14/2019 A Guide to PHP
74/184
changeCase("Hello Sam", "L");
?>
Here, depending on the value of the second argument, program flow withinthe function moves to the appropriate branch and manipulates the first
argument.
Note that there is no requirement to specify the data type of the argument
being passed to a function. Since PHP is a dynamically-typed language, it
automatically identifies the variable type and acts on it appropriately.
Circles in the Sand
The functions on the previous page simply printed their output to the screen.
But what if you want the function to do something else with the result? Well,
in PHP, you can have a function return a value, such as the result of a
calculation, to the statement that called it. This is done using a return
statement within the function, as shown below:
8/14/2019 A Guide to PHP
75/184
?>
Here, the argument passed to the getCircumference() function is
processed, and the result is returned to the main program, where it may becaptured in a variable, printed, or dealt with in other ways.
You can even use the result of a function inside another function, as
illustrated in this minor revision of the example above:
Return values need not be numbers or strings alone: a function can just as
easily return an array (remember them?), as demonstrated in the following
example:
8/14/2019 A Guide to PHP
76/184
foreach ($list as $l) {
$arr = explode("@", $l);
$domains[] = trim($arr[1]);
}
// remove duplicates and returnreturn array_unique($domains);
}
// read email addresses from a file into an array
$fileContents = file("data.txt");
/* pass the file contents to the function and retrieve the
result array */
$returnArray = getUniqueDomains($fileContents);
// process the return array
foreach ($returnArray as $d) {
print "$d, ";
}
?>
Assuming the file looked like this,
the output ofthe script above would look like this:
test.com, x.com, deeply.bored.org, where.ami.net,
Note that the return statement terminates program execution inside a
function.
Marching Order
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]://devzone.zend.com/manual/function.file.phphttp://devzone.zend.com/manual/function.array-unique.phpmailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]://devzone.zend.com/manual/function.file.phphttp://devzone.zend.com/manual/function.file.phphttp://devzone.zend.com/manual/function.array-unique.phphttp://devzone.zend.com/manual/function.array-unique.phphttp://devzone.zend.com/manual/function.trim.phphttp://devzone.zend.com/manual/function.trim.phphttp://devzone.zend.com/manual/function.explode.phphttp://devzone.zend.com/manual/function.explode.php8/14/2019 A Guide to PHP
77/184
The order in which arguments are passed to a function can be important.
The following example requires that the name is passed as the first
argument, and the place as the second.
This is the output:
Hello, I am Moonface from The Faraway Tree
In this example, if you reversed the order in which arguments were passed
to the function, this is what you'd see:
Hello, I am The Faraway Tree from MoonfaceAnd look what happens if you forget to pass a required argument altogether:
Warning: Missing argument 2 for introduce() in xx.php on
line 3
Hello, I am Moonface from
In order to avoid such errors, PHP allows you to specify default values for all
the arguments in a user-defined function. These default values are used if
the function invocation is missing some arguments. Here's an example:
8/14/2019 A Guide to PHP
78/184
// call function
introduce("Moonface");
?>
In this case the output would be:
Hello, I am Moonface from London
Notice that the function has been called with only a single argument, even
though the function definition requires two. However, since default values
are present for each argument in the function, the missing argument is
replaced by the default value for that argument, and no error is generated.
The Amazing Shrinking Argument List
All the examples on the previous page have one thing in common: the
number of arguments in the function definition is fixed. However, PHP 4.x
also supports variable-length argument lists, by using the
func_num_args() and func_get_args() commands. For want of a better
name, these functions are called "function functions". Try wrapping your
tongue around that while you look at the next example, which demonstrates
how they can be used:
8/14/2019 A Guide to PHP
79/184
}
print "
";
}
// call a function with different argumentssomeFunc("red", "green", "blue");
someFunc(1, "soap");
?>
Hmmm... if you're sneaky, you might have tried to pass someFunc() an
array, and found that instead of displaying the elements of the array, it
simply said "Array". You can fix this by adding a quick test for array
arguments inside the function, as in this rewrite:
8/14/2019 A Guide to PHP
80/184
}
else {
print " $args[$x] ";
}
}}
// call a function with different arguments
someFunc("red", "green", "blue", array(4,5), "yellow");
?>
Going Global
Let's now talk a little bit about the variables used within a function, and their
relationship with variables in the outside world. Usually, the variables used
within a function are "local" - meaning that the values assigned to them, and
the changes made to them, are restricted to the function space alone.
Consider this simple example:
8/14/2019 A Guide to PHP
81/184
// print the variable
print "It is $today outside the function";
?>
When you run this script, here is what you will see:
It is Saturday inside the function
It is Tuesday outside the function
In other words, the variable inside the function is insulated from the
identically-named variable in the main program. Variables inside a function
are thus aptly called "local" variables because they only exist within the
function in which they are defined.
The reverse is also true: variables defined inside a function cannot be "seen"
outside it. To illustrate, take a look at the next example and its output (or
the lack of it):
Here is the output:
Today is
Depending on the error_reporting you have set up in php.ini, you might also
see an error message:
8/14/2019 A Guide to PHP
82/184
Notice: Undefined variable: today in x1.php on line 10
However, I didn't say this can't be overcome. To have variables within a
function accessible from outside it (and vice-versa), all you need to do isfirst declare them "global" with the - you guessed it! - global keyword.
Here is a rewrite of the earlier example, this time declaring the $today
variable global:
8/14/2019 A Guide to PHP
83/184
?>
And here is the output:
It is Tuesday before running the function
It is Saturday inside the function
It is Saturday after running the function
Thus, once a variable is declared global, it is available at the global level,
and can be manipulated both inside and outside a function.
PHP also comes with so-called superglobal variables - variables that are
always available, regardless of whether you're inside a function or outside it.
You've already seen some of these special variables in action: the
$_SERVER, $_POST and $_GET variables are all superglobals, which is why
you can access things like the currently-executing script's name or form
values even inside a function.
Superglobals are a Good Thing, because they're always there when you
need them, and you don't need to jump through any hoops to use the data
stored inside them. Read more about superglobals and variable scope at
http://www.php.net/manual/en/language.variables.predefined.php and
http://www.php.net/manual/en/language.variables.scope.php.Checking References
Any discussion about variables in and out of functions would be incomplete
without some mention of the difference between "passing by reference" and
"passing by value". So far, all the examples you've seen have involved
passing arguments to a function "by value" - meaning that a copy of the
variable was passed to the function, while the original variable remained
untouched. However, PHP also allows you to pass "by reference" - meaning
that instead of passing a value to a function, you pass a reference to theoriginal variable, and have the function act on that instead of a copy.
Confusing? Well, this is probably easier to understand with an example. Let's
start with this:
http://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.predefined.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.scope.phphttp://www.php.net/manual/en/language.variables.predefined.phphttp://www.php.net/manual/en/language.variables.predefined.php8/14/2019 A Guide to PHP
84/184
You've already seen this before, and you already know what the output is
going to say:
It is Tuesday inside the function
It is Saturday outside the function
This is because when the getDay() function is invoked, it passes the value
"Saturday" to the function ("passing by value"). The original variable
remains untouched; only its content is sent to the function. The function
then acts on the content, modifying and displaying it.
Now, look at how "passing by reference" works:
8/14/2019 A Guide to PHP
85/184
function setDay(&$day) {
$day = "Tuesday";
print "It is $day inside the function
";
}
// call function
setDay($today);
// print the value of the variable
print "It is $today outside the function";
?>
Notice the ampersand (&) before the argument in the function definition.
This tells PHP to use the variable reference instead of the variable value.
When such a reference is passed to a function, the code inside the function
acts on the r