420 likes | 708 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
E N D
PHP Basics based on some materialby 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/