1 Introduction to PHP Part #2. 2 Simple PHP Script Consider the following HTML file, example.html:...

62
1 Introduction to PHP Part #2

Transcript of 1 Introduction to PHP Part #2. 2 Simple PHP Script Consider the following HTML file, example.html:...

1

Introduction to PHPPart #2

2

Simple PHP Script

• Consider the following HTML file, example.html:

<html><head><title>My Page</title></head><body>Hello world!<p></body></html>

3

Simple PHP Script• Here is an equivalent PHP script. PHP files have the extension “.php” and may

contain both HTML and PHP code, which is enclosed inside <? code ?> tags, or alternately <?php code ?>

<html><head><title>My Page</title></head><body><? print(“hello world!<p>”); ?></body></html>

4

Simple PHP Script

• More interesting version, displays the date as known by the server:

<html><head><title>My Page</title></head><body><? print(“hello world! Timestamp: “ . time() . “<p>”); ?></body></html>

5

PHP Time Stamp

• The “.” is used to concatenate strings

• The server parses the document and interprets code within the <? ?> tags instead of sending it directly to the client– i.e. you can write code to output the HTML you

desire

• Output of previous:

hello world! Timestamp: 1050289182

hello world! Timestamp: 1050289184Refresh twoSeconds later:

6

PHP Script• Often everything is placed inside the PHP tags.

The following is equivalent; the header function specifies the MIME Type; i.e. that the document is HTML (as opposed to graphics, etc.):

<? header("Content-Type: text/html"); print("<HTML><HEAD><TITLE>My Page</TITLE>"); print("</HEAD>"); print("<BODY>"); print("hello world! Timestamp: " . time() . "<p>"); print("</BODY></HTML>");?>

7

Identifiers and Data Types

• Identifiers– Case-sensitive– Same rules as Java

• Data Types– integer– double– string, surrounded by “ “ or by ‘ ‘

– Weak typing; you do not declare variables, just use them and the value assigned is the type of the variable; any old value is gone

– Can typecast just like Java• (int), (double), (string), etc.

8

Variables

• A variable is an identifier prefaced by $• Example:

$x = 1; $y = 3.4; $z = $x + $y; $a = true; $s = "hello!"; print ($z . " " . $a . " " . $s);

Output: 4.4 1 hello! Note: true = non zero or not empty. False = 0 or the empty string “”

Common novice mistake: Forgetting the $

9

Variables

• Interpreted; consider the following: $x = 1; $y = “x”; print($y);

Output: 1

• Often {} are used to denote variable boundaries:$x = 1;$y = “x”;print({$y});

10

Form Variables

• If an HTML form invokes a PHP script, the PHP script can access all of the form variables by name

• Invoking FORM:<form method=post action=“scr.php”><input type=text name=“foo” value=“bar”>

<input type=submit value=“Submit”></form>

• Inside scr.php:print($_REQUEST['foo']); // Outputs “bar”

11

Sample PHP Form<? header("Content-Type: text/html"); print("<HTML><HEAD><TITLE>My Page</TITLE>"); print("</HEAD>"); print("<BODY>"); print("foo = " . $_REQUEST[‘foo’] . ", bar = " . $_REQUEST[‘bar’] . "<P>"); print("<form method=post action=\"example.php\">"); print("<input type=text name=\"foo\" value=\"zot\">"); print("<input type=hidden name=\"bar\" value=3>"); print("<input type=submit>"); print("</form>"); print("</BODY></HTML>");?>

Note: \” escape characterCould also use ‘ instead

12

Sample PHP Form

• First load:

• Upon submit:

13

Web browser

• What the web browser receives after the first load. Note that we see no PHP code:

<HTML><HEAD><TITLE>My Page</TITLE></HEAD><BODY>foo = , bar = <P><form method=post action="example.php"><input type=text name="foo" value="zot"><input type=hidden name="bar" value=3><input type=submit></form></BODY></HTML>

14

GET and POST• One way to hide the printing of variables when the

code is first loaded is to detect if the program is invoked via GET or POST

<? header("Content-Type: text/html"); print("<HTML><HEAD><TITLE>My Page</TITLE>"); print("</HEAD>"); print("<BODY>"); if ($_SERVER['REQUEST_METHOD'] == ‘POST') { print("foo = " . $_REQUEST[‘foo’] . ", bar = " . $_REQUEST[‘bar’] . "<P>"); } print("<form method=post action=\"example.php\">"); print("<input type=text name=\"foo\" value=\"zot\">"); print("<input type=hidden name=\"bar\" value=3>"); print("<input type=submit>"); print("</form>"); print("</BODY></HTML>");?>

15

Operators

• Same operators available as in Java:+, -, *, /, %, ++, -- (both pre/post)

+=, -=, *=, etc.

<, >, <=, >=, ==, !=, &&, ||, XOR, !

16

Assignments

• PHP will convert types for you to make assignments work

• Examples:print(1 + "2"); // 3

print("3x" + 10.5); // 13.5

$s = "hello" . 55;

print("$s<p>"); // hello55

17

Arrays

• Arrays in PHP are more like hash tables, i.e. associative arrays– The key doesn’t have to be an integer

• 1D arrays– Use [] to access each element, starting at 0– Ex:

$arr[0] = “hello”;$arr[1] = “there”;$arr[2] = “zot”;$i=0;print(“$arr[$i] whats up!<p>”); // Outputs : hello whats up!

18

Arrays

• Often we just want to add data to the end of the array, we can do so by entering nothing in the brackets:

$arr[] = “hello”;

$arr[] = “there”;

$arr[] = “zot”;

print(“$arr[2]!<p>”); // Outputs : zot!

19

Array Functions

• There are many array functions; here are just a few:

count($arr); // Returns # items in the arraysort($arr); // Sorts arrayarray_unique($arr); // Returns $arr without duplicates

print_r($var); // Prints contents of a variable // useful for outputting an entire

array // as HTML

in_array($val, $arr) // Returns true if $val in $arr

20

Multi-Dimensional Arrays

• To make multi-dimensional arrays just add more brackets:

$arr[0][0]=1;

$arr[0][1]=2;

$arr[1][0]=3;

..etc.

21

Arrays with Strings as Key

• So far we’ve only seen arrays used with integers as the index• PHP also allows us to use strings as the index, making the

array more like a hash table• Example:

$fat[“big mac”] = 34;$fat[“quarter pounder”]=48;$fat[“filet o fish”]=26;$fat[“large fries”]=26;print(“Large fries have “ . $fat[“large fries”] . “ grams of fat.”);

// Output : Large fries have 26 grams of fat

Source: www.mcdonalds.com

22

Iterating through Arrays with foreach

• PHP provides an easy way to iterate over an array with the foreach clause:

• Format: foreach ($arr as $key=>$value) { … }

• Previous example:

foreach($fat as $key=>$value)

{

print(“$key has $value grams of fat.<p>”);

}

Output:

big mac has 34 grams of fat. quarter pounder has 48 grams of fat. filet o fish has 26 grams of fat. large fries has 26 grams of fat.

23

Foreach

• Can use foreach on integers too:

$arr[]="foo"; $arr[]="bar"; $arr[]="zot"; foreach ($arr as $key=>$value) { print("at $key the value is $value<br>"); }

Output: at 0 the value is fooat 1 the value is barat 2 the value is zot

If only want the value,can ignore the $key variable

24

Control Statements

• In addition to foreach, we have available our typical control statements

– If– While– Break/continue – Do-while– For loop

25

IF statement

• Format:

if (expression1){

// Executed if expression1 true}elseif (expression2){

// Executed if expression1 false expresson2 true}…else{

// Executed if above expressions false}

26

While Loop

• Format:

while (expression)

{

// executed as long as expression true

}

27

Do-While

• Format:

do

{

// executed as long as expression true

// always executed at least once

}

while (expression);

28

For Loop

• Format:

for (initialization; expression; increment)

{

// Executed as long as expression true

}

29

Control Example

srand(time()); // Seed random # generator with time

for ($i=0; $i<100; $i++) { $arr[]=rand(0,10); // Random number 0-10, inclusive } $i=0; while ($i<=10) { // Initialize array of counters to 0 $count[$i++]=0; } // Count the number of times we see each value foreach ($arr as $key=>$value) { $count[$value]++; } // Output results foreach ($count as $key=>$value) { print("$key appeared $value times.<br>"); }

Counts # of random numbers generated between 0-10

30

Output

0 appeared 9 times.1 appeared 9 times.2 appeared 11 times.3 appeared 14 times.4 appeared 6 times.5 appeared 7 times.6 appeared 8 times.7 appeared 11 times.8 appeared 5 times.9 appeared 9 times.10 appeared 11 times.

31

Functions

• To declare a function:

function function_name(arg1, arg2, …) {

// Code// Optional: return (value);

}

Unlike most languages, no need for a return type since PHP is weakly typed

32

Function Example: Factorial

function fact($n)

{

if ($n <= 1) return 1;

return ($n * fact($n-1));

}

print(fact(5)); // Outputs 120

33

Scoping

• Variables defined in a function are local to that function only and by default variables are pass by value

function foo($x,$y){ $z=1; $x=$y + $z; print($x); // Outputs 21}

$x=10;$y=20;foo($x,$y);print(“$x $y<p>”); // Outputs 10 20

34

Arrays: Also Pass By Valuefunction foo($x){ $x[0]=10;

print_r($x); Array ( [0] => 10 [1] => 2 [2] => 3 ) print("<p>");}

$x[0]=1; $x[1]=2; $x[2]=3;

print_r($x); Array ( [0] => 1 [1] => 2 [2] => 3 ) print("<p>"); foo($x);

print_r($x); Array ( [0] => 1 [1] => 2 [2] => 3 ) print("<p>"); Not changed!

35

Pass by Reference

• To pass a parameter by reference, use & in the parameter list

function foo(&$x,$y){ $z=1; $x=$y + $z; print($x); // Outputs 21}

$x=10;$y=20;foo($x,$y);print(“$x $y<p>”); // Outputs 21 20

36

Dynamic Functions

• Functions can be invoked dynamically too

• Useful for passing a function as an argument to be invoked later

function foo() { print("Hi<p>"); }

$x="foo"; $x(); // Outputs “Hi”

37

Classes & Objects

• PHP supports classes and inheritance• All instance variables are public in PHP 4 (PHP 5 allows private,

protected)• Format for defining a class; the extends portion is optional

class name extends base-class{

var varName;…function name() {… constructor code …}function methodName() { … code … }

…}

• To access a variable or function, use $obj->var (no $ in front of the var)• To access instance variables inside the class, use $this->var

needed to differentiate between member var and a new local var

38

Class Example class user { var $name; var $password; function user($n, $p) { $this->name=$n; $this->password=$p; } function getSalary() { // if this was real, we might // look this up in a database or something return 50000; } }

$joe = new user("Joe Schmo","secret"); print($joe->name . " - " . $joe->password . "<p>"); print($joe->getSalary() . "<p>");

Output:

Joe Schmo - secret

50000

39

Objects in PHP 4

• Assigning an object makes a new copy, not a reference like Java:

$joe = new user("Joe Schmo","secret"); $fred = $joe; $joe->password = "a4j1%"; print_r($joe); // user Object ( [name] => Joe Schmo [password] => a4j1% ) print("<p>"); print_r($fred); // user Object ( [name] => Joe Schmo [password] => secret ) print("<p>");

40

Objects in PHP 5

• Assigning an object makes a reference to the existing object, like Java:

$joe = new user("Joe Schmo","secret"); $fred = $joe; $joe->password = "a4j1%"; print_r($joe); // user Object ( [name] => Joe Schmo [password] => a4j1% ) print("<p>"); print_r($fred); // user Object ( [name] => Joe Schmo [password] => a4j1% ) print("<p>");

41

Other new items in PHP 5

• Mostly improvements in OOP model– Abstract classes and methods– Destructors– Cloning– instanceof– Reflection

42

Using PHP

• Here we will focus on additional functions that will be helpful for you to complete the homework assignment

– Type Checking• is_array, is_string, is_long, is_double

– Useful string functions• strlen, implode, explode, substr, strstr, trim, char access

– File I/O• fopen, fread, feof, fclose, fwrite

– Some examples

43

Type Checking

• PHP includes several functions to determine the type of a variable since it may not be obvious what the type is due to conversions

is_int($x) // returns true if $x is an integer

is_double($x) // returns true if $x is a double

is_array($x) // returns true if $x is an array

is_string($x) // returns true if $x is a string

is_null($x) // returns true if $x is a null

44

String Functions

• We can access a string as an array to retrieve individual characters:

$s=“hithere”;$z = $s[0] . $s[2] . $s[4];print($z); // hte

• We can also assign characters to the string:$s[2] = “F”;print($s); // hiFhere

45

Strings

• String length: strlen($s) returns the length of the string

$s="eat big macs"; for ($i=0; $i<(strlen($s)-1)/2; $i++) { $temp = $s[$i]; $s[$i] = $s[strlen($s)-$i-1]; $s[strlen($s)-$i-1] = $temp; }

print($s); // Output : scam gib tae

46

Strings

• Substring: Searches a string for a substringPrototype:

string strstr (string haystack, string needle)• Returns all of haystack from the first occurrence of needle to

the end. • If needle is not found, returns FALSE.

$email = ‘[email protected]'; $domain = strstr ($email, '@');

print ($domain); // prints @acm.org

47

Strings

• strtolower($s) : returns $s in lowercase$s=“AbC”;$s = strtolower($s); // $s = “abc”

• strtoupper($s) : returns $s in uppercase$s = “AbC”;$s = strtoupper($s); // $s = “ABC”

• trim($s) : returns $s with leading, trailing whitespace removed

$s = “ \n ABC \r\n”; $s = trim($s); // $s = “ABC”

Trim is useful to remove CR’s and Newlines when reading lines of data from text files or as input from a form (e.g. textbox, textarea)

48

Strings

• Substring: Format:string substr (string string, int start [, int length])– Substr returns the portion of string specified by the start and length parameters.

– If start is positive, the returned string will start at the start'th position in string, counting from zero. For instance, in the string 'abcdef', the character at position 0 is 'a', the character at position 2 is 'c', and so forth.

• Examples:$rest = substr ("abcdef", 1); // returns "bcdef" $rest = substr ("abcdef", 1, 3); // returns "bcd"

49

Implode

• Implode is used to concatenate elements of an array into a single string

string implode (string glue, array pieces)• Returns a string containing a string representation of all the

array elements in the same order, with the glue string between each element.

• Examples$arr[]="A"; $arr[]="B"; $arr[]="C";$s = implode(",",$arr); // $s = “A,B,C”$s = implode("",$arr); // $s = “ABC”

50

Explode

• Explode is used to create an array out of a string with some delimiter

array explode (string separator, string string)• Returns an array of strings, each of which is a substring of string

formed by splitting it on boundaries formed by the string separator.

• Example$s="eat:large:fries";$arr = explode(":",$s);print_r($arr);print("<p>");

Output: Array ( [0] => eat [1] => large [2] => fries )

51

File I/O• Opening a file: fopen• Format:

int fopen (string filename, string mode)– Filename is the complete path to the file to open; must have proper

permissions– Mode is one of the following

• 'r' - Open for reading only; place the file pointer at the beginning of the file. • 'r+' - Open for reading and writing; place the file pointer at the beginning of the

file. • 'w' - Open for writing only; place the file pointer at the beginning of the file and

truncate the file to zero length. If the file does not exist, attempt to create it. • 'w+' - Open for reading and writing; place the file pointer at the beginning of

the file and truncate the file to zero length. If the file does not exist, attempt to create it.

• 'a' - Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.

• 'a+' - Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.

– Returns: a file pointer used to reference the open file

52

File I/O

• Reading from a text file:string fgets (int filepointer, int length)

– Returns a string of up to length - 1 bytes read from the file pointed to by fp.

– Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first).

– We can use this function on files we have opened for reading

53

File I/O

• Writing to a text file:int fwrite (int fp, string string)– fwrite() writes the contents of string to the file stream pointed to

by fp. – The file must be opened for writing

• Checking for end of filefeof(int fp)Returns true if we have reached the end, false otherwise

• Closing a filefclose(int fp)Use when done with the file and close the file pointer

54

File I/O example

$fd = fopen ("/proc/cpuinfo", "r");

while (!feof ($fd)) {

$oneline = fgets($fd, 4096);

print("$oneline<br>");

}

fclose ($fd);

55

fgets

• IMPORTANT – Remember that fgets returns the string WITH the newline

• This is critical if you are going to perform comparisons– You’ll get a false match if the newline is not

accounted for– Easiest technique: trim out the newlines

$oneline = trim(fgets($fp, 1024));

56

Example

• Create a single PHP script that generates a form with a textarea– Allow the user to enter numbers in the textarea– Submit the form to the same script– Compute the sum of the numbers in the textarea

and print it out

57

Example.php

<?phpheader("Content-Type: text/html");print("<HTML><HEAD><TITLE>My Page</TITLE>");

print("</HEAD>");print("<BODY>");

if($_SERVER['REQUEST_METHOD'] != "POST"){

// We are loading for the first time,// not receiving a form. So generate// a form allowing the user to enter// data in a text area and have it submitted// to this same scriptprint("<FORM method=post action='example.php'>");print("Enter numbers below.<p>");print("<TEXTAREA name='myData' rows=10></TEXTAREA>");print("<INPUT type=submit>");print("</FORM>");

}

58

Example.phpelse{

// We are receiving data from our form// Put the text data into an array. Each// is separated by a newline, so use explode// to parse$a = explode("\n",$_REQUEST['myData']);// Here we loop through and add up the numbers$total = 0;foreach ($a as $key=>$value) {

// Each element in the array is a string,// but note that each will contain a \r// whitespace at the end, so you may wish// to trim these out. It is not really// necessary in this example but you will// probably want to trim for your homework$num = (int) trim($value);$total += $num;

}print("The sum of your numbers is $total<p>");

} print("</BODY></HTML>");?>

59

Execution

60

Summary

• PHP is an imperative language for the web• Similarities to C, Java, and even interpreted

languages• Can’t do everything since server side only –

sometimes coupled with client-side languages such as JavaScript

• PHP version 5 not quite backward compatible with PHP 4

• Easy to write sloppy code so one must be more disciplined in design of classes, functions, variables, HTML, documentation

61

Lots More to PHP• We have only scratched the surface, but there is much more that

PHP can do– Generate graphics (gd library)– Networking, Sockets, IRC, Email– Database Access – LDAP– Regular Expressions– PDF– Java– XML– Design methodologies (e.g. FuseBox, include files)– Many more

• See the excellent resources online– www.php.net– www.phpbuilder.com– www.zend.com

62

End of PHP