PHP Basics by Lisa Wise

nostalgicisolatedSoftware and s/w Development

Nov 4, 2013 (3 years and 10 months ago)

45 views

PHP Basics
based on some material

by Lisa Wise
and PHP on line manual at: http://www.php.net/manual/en/


PHP
-

Overview

Scripting vs Programming

Code Examples


PHP; Perl; JSP

PHP Strengths

Basics of PHP

Included files

Variables & Scope

Output

Variable types ; Boolean; Strings

String Functions & Parsers

Screening User Input/Output

Maths functions

Control and flow

PHP


PHP is a scripting language that allows you to create
dynamic web pages


You can embed php scripting within normal html coding


PHP was designed primarily for the web


PHP includes a comprehensive set of database access
functions


Scripting vs Programming


A script is interpreted line by line every time it is run


A true programming language is compiled from its
human readable form(source code) into a machine
readable form (binary code) which is delivered to the
user as a program.


Variables in scripting languages are typeless whereas
variables in programs need to be declared as a
particular type and have memory allocated to them.


PHP requires programming skills


PHP web sites should be developed within a software
engineering framework

PHP Competitors


Perl



Microsoft Active Server Pages (ASP)


Java Server Pages (JSP)


Allaire Cold Fusion


It would be good to work together to make
equivalent code libraries across scripting

languages

PHP Code Examples


<?php


$name = "Lisa";


$date = date ("d
-
m
-
Y", time());


?>


<html>


<head>


<title>Hello World</title>


</head>


<body>


<h1>Hello World</h1>


<p>It's <?php echo $date; ?> and all is well. </p>


<?php


echo "<p>Hello ".$name.".</p>
\
n";


?>


</body>


</html>

Perl Coding Example


#!/usr/local/bin/perl



print "Content
-
type: text/html
\
n
\
n";


$date = `/usr/local/bin/date`;


$name = "Lisa";


print "<html>";


print "<head>";


print "<title>Hello World</title>"


print "</head>
\
n<body>";


print "<h1>Hello World</h1>";


print "<p>It
\
's $date and all is well</p>";


print "<p>Hello $name</p>";


print "</body></html>";



JSP Coding Example

<%@ page language="java"



contentType="text/html" %>


<%! String name = "Lisa" %>


<html>

<head> <title>Hello World</title> </head>


<body>


<h1>Hello World</h1>


<p>It's <%= new java.util.Date().toString() %>


and all is well. </p>


<p> Hello <%= name %>.</p>


</body>


<html>

PHP Strengths


High performance


-

see benchmarks at
http://www.zend.com


Interfaces to different database systems


Low cost


SourceForge has
PHPTriad

(Apache, PHP and
MySQL) for Windows


Ease of learning and use


Portability

Basics of PHP


PHP files end with .php


other places use .php3 .phtml .php4 as well


PHP code is contained within tags


Canonical: <?php ?> or Short
-
open: <? ?>



HTML script tags: <script language="php">
</script>



Recommend canonical tags so as not to confuse
with xml tags


Include files


Files can be inserted into other files using include
or require


These files can have any name and be anywhere
on the filesystem so long as the file trying to
include them has appropriate rights



CAVEAT: if these files are not called blah.php,
and they are fetched independently by a browser,
they will be rendered in plaintext rather than
passed to the PHP interpreter
-

not good if they
contain username/passwords and the like.


Output


Most things in PHP execute silently


You need to explicitly ask PHP to generate output



Echo is not a function and cannot return a value




echo "<p>This is a paragraph.</p>";


Print is a function and returns a value


1 = success, 0 = failure



print ("<p>This is a paragraph too.</p>");



Use echo or print statements and View Source for
debugging your code

Variables


All variables begin with $ and can contain letters,
digits and underscore (and no digit directly after
the $)


The value of a variable is the value of its most
recent assignment


Don’t need to declare variables


Variables have no intrinsic type other than the
type of their current value


Can have variable variables $$variable


Like a pointer variable type; best to avoid


PHP Manual

Variables Scope


Scope refers to where within a script or program a
variable has meaning or a value


Mostly script variables are available to you
anywhere within your script.


Note that variables inside functions are local to
that function and a function cannot access script
variables outside the function even if they are in
the same file.


The modifiers global and static allow function
variables to be accessed outside the function or to
hold their value between function calls
respectively

Variable types


Strings


Numbers


Integers


doubles



Booleans



TRUE / FALSE


Arrays


Objects

Variable Examples


Integer

$a = 1234; # decimal number

$a =
-
123; # a negative number

$a = 0123; # octal number (equivalent to 83 decimal)

$a = 0x1A; # hexadecimal number (equivalent to 26 decimal)


Floating Point Numbers

$a = 1.234; $a = 1.2e3; $a = 7E
-
10;


Boolean

$foo = True; // assign the value TRUE to $foo



// == is an operator which returns a boolean


if ($action == "show_version") {


echo "The version is 1.23";


}


// this is not necessary:


if ($show_separators == TRUE) {


echo "<hr>
\
n";


}


// because you can simply type this:


if ($show_separators) {


echo "<hr>
\
n";


}

Variable Examples cont.


Strings (single or double quoted)


echo 'this is a simple string';


echo 'You can also have embedded newlines in strings, like this way.';


echo 'Arnold once said: "I
\
'll be back"';


// output: ... "I'll be back"

echo 'Are you sure you want to delete C:
\
*.*?';


// output: ... delete C:
\
*.*?



Arrays

$error_descriptions[E_ERROR] = "A fatal error has occured";

$error_descriptions[E_WARNING] = "PHP issued a warning";

$error_descriptions[E_NOTICE] = "This is just an informal notice";


the last example is in fact the same as writing:

$error_descriptions[1] = "A fatal error has occured";

$error_descriptions[2] = "PHP issued a warning";

$error_descriptions[8] = "This is just an informal notice";

(The first method is useful if E_ERROR is defined as a constant etc).

Constants and Globals


To define a constant:

define(“PI”, 3.1416);

$area = PI*$radius*$$radius ;


Globals:


Defined outside any function; eg form variables


global $var1, $var2 …

…function xyz()


{


$localvarX = $var1


…}

Boolean


Unlike PHP3, PHP4 has a boolean type


if (TRUE) print ("This will always print");


A number is FALSE if it exactly equals 0
otherwise it is TRUE


A string is FALSE if it is empty (has zero
characters) or is "0" otherwise it is TRUE


An array or object is FALSE if it contains
no other values and is TRUE otherwise

Arrays in PHP


An array in PHP is actually an ordered map which maps values to
keys. An array can be thought of in many ways. Each of the concepts
below can be implemented in a PHP array, so you can choose which
ever of these ideas that you understand to conceptualise an array.



linearly indexed array



list (vector)



hashtable (which is an implementation of a map)



dictionary



collection



stack (LIFO)



queue (FIFO)



can easily simulate trees and linked lists with arrays of arrays

Eg: Numerically
-
indexed arrays (Vector array)



Say that we have a list of marks out of 100 in a subject 95, 93, 56, 70,
65, 98



array value 1
-

95



array value 2
-

93



array value 3
-

56



array value 4
-

70



array value 5
-

65



array value 6
-

98



$marks = array (95, 93, 56, 70, 65, 98);

generates a numerically
-
indexed array

$marks[0] = 95 ;

$marks[1] = 93 ;

$marks[2] = 56 ;

$marks[3] = 70 ;

$marks[4] = 65 ;

$marks[5] = 98 ;




Example: Numerically
-
indexed arrays (cont)


The following code also generates a numerically
-
indexed array, allocating the next index after the
highest current index to the element.



$marks[] = 95;



$marks[] = 93;



marks[0] is 95 and marks[1] is 93.



Note that array indexes start at 0 by default.


You can skip indices by allocating a specific index
to a value
-



$marks[5] = 56;



$marks[] = 70;



will be allocate 70 to $marks[6].


marks[5] is 56 and marks[6] is 70.

Associative arrays


Say we have a list of marks out of 100 in a subject
and we want to know who got what mark:



Adrian
-

95, Matty
-

93, Lance
-

56, Stephen
-

70,
Craig
-

65, Andy
-

98

$marks = array ("Adrian"=>93, "Lance"=>56,
"Stephen"=>70, "Craig"=>65, "Andy"=>98);



maps a value to a key



name is the key



mark is the value

List an associative array


list() in conjunction with each() assigns a key /
value pair into the variables $key and $variable.
The following code prints each key / value pair
into a table. Note that $value might itself be an
array.


reset($marks); // go to the beginning of the array


echo "<table border=
\
"1
\
">"

while (list($key, $value) = each($marks))


{


echo "<tr><td>$key</td><td>$value</td></tr>
\
n";


}


echo "</table><hr>";

List an associative array (cont)


each() actually returns a array for each array item
which includes the key and value as well as the
index 0 mapped to the key and the index 1 mapped
to the value. Reset() puts the index pointer back to
0. Hence if you are more comfortable with
numeric indexes, you can do the following:



reset($marks);


while ($row = each($marks))


{


echo "Mark for $row[0] is $row[1]<br />";


}

Strings


Dot operator for concatenation (joining)


singly quoted read in and store literally


double quoted


certain sequences beginning with
\

are replaced
with special characters +
\
n
\
t
\
r
\
$
\
"
\
\



Variable names are replaced with string
representations of their values


Variable interpolation


No limit on string length

String Functions


boolean strcmp ($str1, $str2)


boolean strcasecmp ($str1, $str2)


boolean strstr ($str1, $str2)


boolean stristr ($str1, $str2)


int strlen($str)


string substr ($str, $start_pos, $len)

String functions (cont)


string chop ($str)


string ltrim ($str)


string trim ($str)


string str_replace ($old_txt, $new_txt, $text)


tring substr_replace ($old_txt, $new_txt, $text)


strtolower($str)


strtoupper($str)


ucfirst($str)


ucwords($str)


these last two don’t correct inappropriate upper case to lower case

Formatting User Input/Output


addslashes($str)


stripslashes($str)


magic_quotes_gpc($str)


not magic_quotes_runtime($query)


escapeshellcmd($str)


strip_tags($str)


htmlspecialchars($str)


htmlentities($str)


nl2br($str)

Maths functions


+
-

/ * %


++
--



+=
-
= *=


= is set to (assignment)


= = is equivalent to eg $a == $b Equal TRUE if $a is equal to $b.


= = = is identical to eg $a === $b Identical TRUE if $a is equal to $b,
and they are of the same type. (PHP 4 only)


$low_int = floor ($double)


$high_int = ceil ($double)


$nearest_int = round ($double)


(nearest even number if exactly .5)


$positive = abs ($number)


$min = min ($n1, $n2 … , $nn)


$max = max ($n1, $n2 … , $nn)

Control and flow


if (expr1) { }


elseif (expr2) { }


else { }



while (cond) { }



do { } while (cond)



switch ($var)


case a { }


case b { }


for ($i = 0; $i < expr; $i ++) { }


foreach (array_expr as $value) { }


foreach (array_expr as $key=>$value) { }


break [1]


continue

If.. Then.. else

*

if ($a > $b) print "a is bigger than b";

*

if ($a > $b) {


print "a is bigger than b";


$b = $a;


}

*

if ($a > $b) {


print "a is bigger than b";


} elseif ($a == $b) {


print "a is equal to b";


} else {


print "a is smaller than b";


}

*

echo "You have $i ". ($i==1 ? "message" :


"messages"). " in your mailbox.
\
n";

While

/* example 1 */



$i = 1;


while ($i <= 10) {


print $i++; /* the printed value would be


$i before the increment


(post
-
increment) */


}


/* example 2
-

alternative notation to using the braces
-

: and endwhile*/


$i = 1;


while ($i <= 10):


print $i;


$i++;


endwhile;

For loops

/* example 1 similar to C syntax */

for ($i = 1; $i <= 10; $i++) {





print $i;






}


/* example 2 */

for ($i = 1;;$i++) {






if ($i > 10) {






break;






}





print $i;





}


/* example 3 */

$i = 1;


for (;;) {


if ($i > 10) {


break;


}


print $i;


$i++;


}


/* example 4 */

for ($i = 1; $i <= 10; print $i, $i++);

Foreach

An easy way to iterate over arrays. There are two syntaxes; the second is a
minor but useful extension of the first:


foreach(array_expression as $value) statement


foreach(array_expression as $key => $value) statement

The following are functionally identical:

//example 1 //


reset ($arr);


while (list(, $value) = each ($arr)) {


echo "Value: $value<br>
\
n";


}

//example 2 //


foreach ($arr as $value) {


echo "Value: $value<br>
\
n";


}

Foreach cont.

/* foreach example 1: value only */

$a = array (1, 2, 3, 17);


foreach ($a as $v) {


print "Current value of
\
$a: $v.
\
n";


}


/* foreach example 2: value (with key printed for illustration) */


$a = array (1, 2, 3, 17);


$i = 0; /* for illustrative purposes only */


foreach($a as $v) {


print "
\
$a[$i] => $v.
\
n";


$i++;


}


/* foreach example 3: key and value */


$a = array ( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 );


foreach($a as $k => $v) {


print "
\
$a[$k] => $v.
\
n";


}




Break & Continue

-
break ends execution of the current for, foreach while,
do..while or switch structure.

$arr = array ('one', 'two', 'three', 'four', 'stop', 'five');


while (list ($key, $val) = each ($arr)) {


if ($val == 'stop') {


break; /* You could also write 'break 1;' here. */


}


echo "$val<br>
\
n";

} /* note list() is a multiple assignment function; the key and value returned by
each() are assigned to $key and $value. $key is not used in this example.

-
continue is used within looping structures to skip the rest of
the current loop iteration and continue execution at the
beginning of the next iteration.



Switch

if ($i == 0) { print "i equals 0";


}

if ($i == 1) { print "i equals 1";

}

if ($i == 2) { print "i equals 2";


}

/* this is equivalent */


switch ($i) {


case 0:





print "i equals 0";


break;


case 1:


print "i equals 1";


break;


case 2:


print "i equals 2";


break;


}

require() and include()


require() includes and evaluates a specific file.


require() and include() are identical in every way except how they
handle failure. include() produces a Warning while require() results in
a Fatal Error.

<?php


require 'prepend.php';


require $somefile;

require ('somefile.txt');

?>



require_once() or include_once() should be used in cases where the
same file might be included and evaluated more than once during a
particular execution of a script, and you want to be sure that it is
included exactly once to avoid problems with function redefinitions,
variable value reassignments, etc.

Running an Apache PHP webserver on silas


you have a silas account



login to your account using ssh (eg TeratermPro)



your home directory on silas is something like:



/cc/staff1/l/lzwise/



(you can use pwd to find out the exact path to your directory)


think of a number between 7000 and 8000 which noone else has
thought of (to use as a port number)



run the command makeserver



modify the apache/httpd.conf file



ServerAdmin whoever@wherever (change to your email address)



DirectoryIndex index.html (add index.php)



run the command startserver



you may see this error: kill: 1044559: no such process
-

ignore it :
-
)



stop the server with the command stopserver

/usr/local/bin/makeserver.readme


It creates serveral files/directories



Files:



$root/apache/httpd.conf



$root/apache/stopserver



$root/apache/startserver



Directories



$root/apache/logs



$root/apache/cgi
-
bin



$root/apache/htdocs



All of the directories start empty. The access and error logs
will be created in the logs directories once the server is
running.


Content should be added to the htdocs directory.


Examples of PHP on Silas



Examples of PHP on Silas


http://silas.cc.monash.edu.au:8333/