PHP
Ensky / 林宏昱
Browser sends HTTP request
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
Load data from database
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
generate HTML
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
HTTP response to browser
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
CGI and Web server
Web server
CGI
HTTP Request
stdin + env
stdout
HTTP Response + BODY
HTTP request
body
HTTP request header
HTTP response
head + body
What's PHP
• Rasmus Lerdorf, Danmark wrote the first version in 1995, use PHP to maintain his homepage
• Originally stood for "Personal Home Page Tools"
• It stands for PHP: Hypertext Preprocessor now
What can PHP do
• Although PHP is an "hypertext preprocessor"you still can use it to do nearly anything you can do in other language, not just writing a web page
C++, JAVA, Python, …
• You can use PHP to write a web server, BBS crawler, NP homework, even a win32 program
Hello world
the same as
#include<iostream>
using namespace std;
int main () {
cout << "Hello world!";
return 0;
}
in C++
<?php
echo "Hello world!";
?>
OR
Hello world!
PHP at a glance
Variables
$helloWorld = "hello world";
echo $helloWorld;
echo $nonExistVar;
PHP Notice: Undefined variable: nonExistVar
• Variables starts with a $ (dollar) sign
• No reserved word. ($if, $else is okay)
• The other rules is the same as C/C++
Types
• Basic
– Boolean -> TRUE / True / true / FALSE / False / false
– Integer -> -(2^n) ~ 2^n - 1, n = 32 or 64overflow: integer to float conversion
– Float -> IEEE 64bit format
– String
• Complex
– Array
– Object
Type verification
var_dump($variable) // can print out the type of $variable
var_dump(2147483647);
// int(2147483647)
var_dump(2147483648);
// float(2147483648)
var_dump(
array(1,2,3)
);
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
Strings
$string1 = "this is a string\n!";
// this is a string
// !
$string2 = 'this is a string, too\n!';
// this is a string, too\n!
$string3 = $string1 . " and " . $string2;
// this is a string
// ! and this is a string, too\n!
Variables in String
$score = 95;
echo "Ensky's score is: " . $score;
echo "Ensky's score is: {$score}";
// Ensky's score is: 95
echo 'Ensky\'s score is: {$score}";
// Ensky's score is: {$score}
// not work with expression
echo "Hi {1+1}"; // Hi {1+1}
Strings (cont'd)
There is no "char type"
$string = "this is a string!";
var_dump($string);
// string(17) "this is a string!"
var_dump($string[0]);
// string(1) "t"
$string[0] = 'T';
echo $string;
// This is a string!
Implicitly type conversion
In PHP, type conversions are implicitly.
BEWARE OF IT!!
var_dump("123" + 456);
// int(579)
var_dump(456 + "1 apple a day keeps…");
// int(457)
var_dump(456 + "1,000");
// int(457)
Explicitly type conversion
$score = 60;
var_dump( (float) $score);
// float(60)
var_dump( (string) $score);
// string(2) "60"
var_dump( (bool) $score);
// bool(true)
== and ===
$a == $b
TRUE if $a is equal to $b after type juggling.
var_dump( 123 == "123" );
// bool(true)
var_dump( "0" == "0.00" );
// bool(true)
var_dump( "0" == 0 );
// bool(true)
== and ===
var_dump( "0" == null );
// bool(false)
var_dump( "0" == false );
// bool(true)
var_dump( null == false );
// bool(true) !!!!!!
var_dump( "0" == false && false == "" );
// bool(true)
var_dump( "0" == "" );
// bool(false) !!!!!!
== and ===
We can use === to avoid unexpected equality
var_dump( "0" === null );
// bool(false)
var_dump( "0" === false );
// bool(false)
var_dump( false === "" );
// bool(false)
var_dump( "0" === false && false === "" );
// bool(false)
var_dump( "0" === "" );
// bool(false)
== and ===
• $a == $b EqualTRUE if $a is equal to $b after type juggling.
• $a === $b IdenticalTRUE if $a is equal to $b, and they are of the same type.
• Note: var_dump( 123 === "123" );// bool(false)
http://tw2.php.net/ternary
Variable scopes in C
in C++, { } introduces a variable scope
for example
{
int a = 0;
}
cout << a << endl;
// reports error, a is in the inside scope
Variable scopes in PHP
in PHP, only Function introduces a new scope
{
$a = 1;
}
echo $a;
// 1
Variable scopes in PHP
in PHP, only Function introduces a new scope
function setA () {
$a = 1; // local variable
}
function printA () {
echo $a; // no, undefined $a
}
setA();
printA();
// PHP Notice: Undefined variable: a
Variable scopes in PHP
Use global keyword to access the global variable
AVOID!!
function printA () {
global $a;
echo $a;
}
$a = 1;
printA();
// 1
functions in PHP
PHP's function acts like C/C++
function fib ($n) {
return $n <= 2 ?
1 : fib($n-1) + fib($n-2);
}
echo fib(9);
// 34
functions in PHP
Default function arguments
function printScore($score = 0) {
echo "your score is: {$score}";
}
printScore();
// your score is 0
printScore(100);
// your score is 100
Arrays
• PHP's array is very powerful, hence very inefficient
• You can use it like
– Array in C / ArrayList in Java / List in Python
– Map in C / HashMap in Java / Dictionary in Python
• With PHP's powerful built-in array functions, array can easily becomes many data structure like Dequeue, Queue, Stack
• You can put anything in array, even another array, or an object;
Arrays
You can use like a simple C-style array
$scores = array(30, 35, 45, 25);
print_r($scores);
/* Array
(
[0] => 30
[1] => 35
[2] => 45
[3] => 25
) */
key
value
Arrays
Totally the same as
$scores = array(0 => 30, 1 => 35, 2 => 45, 3 => 25);
print_r($scores);
/* Array
(
[0] => 30
[1] => 35
[2] => 45
[3] => 25
) */
key
value
Arrays
or a HashMap
$menu = array(
'beef noodles' => 260,
'noodles' => 60,
'beef' => 200
);
echo "price of beef is: $" . $menu['beef'];
// price of beef is: $200
key
value
Arrays
or act as an queue$queue = array();$queue[] = '1';$queue[] = '2';$queue[] = '3';echo array_shift($queue);// 1print_r($queue);/* Array(
[0] => 2[1] => 3
) */
auto key
value
Arrays
or act as an stack$queue = array();$queue[] = '1';$queue[] = '2';$queue[] = '3';echo array_pop($queue);// 3print_r($queue);/* Array(
[0] => 1[1] => 2
) */
auto key
value
Arrays
hold a structured document
$persion = array(
'name' => 'ensky',
'age' => 23,
'works' => array(
'NCTU computer science TA',
'2014 Database TA'
)
);
keyvalue
value
no key, auto assign one
Control Structures
• Nearly the same as C++
• if, else if, else
• switch, case, default
• do … while
• while
• for
• break, continue
• return
Control Structures
Foreach:
$array = array(1, 2, 3);
foreach ($array as $value) {
echo $value . " ";
}
// 1 2 3
Control Structures
Foreach:
$array = array('a' => 'apple', 'b' => 'banana');
foreach ($array as $key => $value) {
echo "{$key}:{$value} ";
}
// a:apple b:banana
PHP and HTML
Let's start with Hello world
PHP & HTML - Hello world
Let's start with Hello world
== index.php ==
<!doctype html><html lang="en">
<head><meta charset="utf-8">
<title>Hello world! Title</title>
</head>
<body>
<p>Hello world!</p></body>
</html>
Recall PHP Hello world
the same as
#include<iostream>
using namespace std;
int main () {
cout << "Hello world!";
return 0;
}
in C++
<?php
echo "Hello world!";
?>
OR
Hello world!
PHP & HTML – print variable
<?php $name = 'ensky'; ?>
…
<body>
<p>Hello world! <?php echo $name; ?></p>
<p>Hello world! <?= $name ?></p></body>
…
PHP & HTML – print data
<?php
$dict = array('a' => 'apple', 'b' => 'banana');
?>
…
<?php foreach ($dict as $key => $val): ?>
<p><?= $key ?> : <?= $val ?></p>
<?php endforeach; ?>
HTML Forms
HTML forms
How to create a form in HTML?
1. create a form tag
<form action="login.php" method="POST">
</form>
where to send GET or POST?
HTML forms
How to create a form in HTML?
2. put some input
<form action="login.php" method="POST">
<input type="text" name="email">
<input type="password" name="password">
</form>
http://www.w3schools.com/tags/att_input_type.asp
HTML forms
How to create a form in HTML?
2. put some inputs
<form action="login.php" method="POST">
<input type="text" name="email">
<input type="password" name="password">
<button type="submit">免費註冊</button>
</form>
POST /login.php HTTP/1.1Host: your_hostname
<form action="login.php" method="POST"><input type="text" name="email"><input type="password" name="password"><button type="submit">免費註冊</button>
</form>
[email protected]&password=nctu5566
/login.php
[email protected]&password=nctu5566
/login.php
In login.php-----<?phpecho $_POST['email'];echo $_POST['password'];?>
POST /login.php HTTP/1.1Host: your_hostname
HTTP & states
HTTP is a stateless protocol
When you open a browser,navigate to a url
HTTP Request
HTTP response
and it is done.
How do we preserve the "state"?
login or not?
who are you?
what did you buy?
Cookie!
• HTTP protocol defined a spec called "cookie"
• which can help server to identify clients
HOW?
client request
HTTP Request
server response with set-cookie header
HTTP responseSet-Cookie: name=ensky
HTML …
Server asked me to save the cookie!
The next client requestwill bring the cookie set by server
HTTP Requestcookie: name=ensky
Server is able to identify which client it is.
HTTP Requestcookie: name=ensky
Oh! you're ensky
Cookie's problem
• However, Cookie identification is too weak!
• Anyone who can make a fake identification
HTTP Requestcookie: name=ensky
Oh! you're ensky
I'm Cracker
Session
• One approach is session
• Server gives client a "temporally key"
HTTP Request
After the request, server will generate the temporarily key
session name
0aj9 ensky
s4df dy93
HTTP Request
generate a temp key, expire in a short time
Response with session(temp key)
HTTP Request
HTTP responseSet-Cookie: session=0aj9
HTML …
session name
0aj9 ensky
s4df dy93
Server can then identify successfully by correct key
HTTP Requestcookie: session=0aj9
Oh! you're ensky
session name
0aj9 ensky
s4df dy93
Use session
Set
------
<?php
session_start();
$_SESSION['name'] = 'ensky';
Use session
Get
------
<?php
session_start();
echo $_SESSION['name'];
Use session
Destroy
------
<?php
session_start();
$_SESSION = array();
session_destroy();
Use session
• Note:session_start(); must be call before any HTML output
– why?
Practice
• write a webpage
– login (using predefined username / password)
• output login error when input wrong username or password
– echo out current DateTime(ex: 2014/3/4 9:55:54) using PHP date() function
• see PHP doc
• shows only when user is logged-in successfully
– logout
• after logout, user cannot use any function without login
• Just practice, no need to hand in
Appendix
Run PHP script
• Since PHP is a server-side CGI, you cannot just open PHP script in your browser
• After written PHP script by IDEs I suggested last week, you should put it in CS web server, and reach it by http://people.cs.nctu.edu.tw/~your_id/file_name.php
or your own webserver and reach it by http://localhost/file_name.php
functions in PHP
Defines as anonymous function
$fib = function ($n) { … }
echo $fib(9);
inner function
function a () {
$n = 0;
$b = function () use ($n) {
// you can use $n here
};
}
since PHP 5.3
functions in PHP
Reference arguments
function addN (& $n) {
$n++;
}
$n = 0;
addN($n);
echo $n;
// 1
Redirect
• how to redirect to another webpage?
<?php
header('location: another_webpage.php');
exit;
note: you must call header before any HTML output, just like session_start();
PHP Module
In PHP, you can import other file into a file
lib.php
-----
<?php
function fib($a) { return … }
page.php
<?php
require_once "lib.php";
echo fib(3);
http://www.php.net/manual/es/function.include.php