Weitere ähnliche Inhalte Ähnlich wie OpenWebSchool - 03 - PHP Part II (20) OpenWebSchool - 03 - PHP Part II2. I/O in PHP
HTTP Request
HTTP Web server stdin + env
Response
+ BODY
stdout CGI
4. I/O in PHP
echo “<html>”;
豈不是超麻煩!
echo “<head>”;
echo “<meta charset=‘utf-8’>”;
echo “<title>test page</title>”;
echo “</head>”;
echo “<body><p>這頁沒有東西</p></body>”;
echo “</html>”;
6. I/O in PHP
印資料的時候呢,其實有個小技巧
<?php
$users = ["Jalex", "ensky"];
?>
<table>
<?php foreach ($users as $row): ?>
<tr><td><?=$row?></td></tr>
<?php endforeach; ?>
</table>
7. I/O in PHP
<?php
foreach ($a as $b):
xxx
endforeach;
等於
foreach ($a as $b) {
xxx
}
if也可以喔! if(): else if (): else: endif;
14. 表單的運作 - GET
GET /search?q=ensky HTTP/1.1
Host: www.google.com.tw
server收到這兩行就知道
他傳了一個q過來
q的值是ensky
19. 表單 in PHP
一個基本的html登入表單
// index.php
<form action="login.php" method="post">
<input type="text" name="username">
<input type="password" name="pw">
<button type="submit">登入</button>
</form>
20. 表單 in PHP
browser看到form action="login.php",
他就會發一個POST HTTP Request到login.php那頁去,
於是PHP就可以收到web server parse好的資料。
<?php
$_POST['username'] = '剛剛打的username';
$_POST['pw'] = '剛剛打的密碼';
而GET Method的話則是$_GET,其他一樣
22. Stateless – WWW recall again
HTTP Request
HTTP Web server stdin + env
Response
+ BODY
stdout CGI
25. Cookie - Demo
• 舉例:你登入之後,server請你把狀態存下來。
Request
POST /auth/login HTTP/1.1
Host: comic.ensky.tw
id=ensky&pw=ensky5566
Response
HTTP/1.1 200 OK
Date: Thu, 09 Aug 2012 15:35:46 GMT
Set-Cookie: id=ensky; valid=1
26. Cookie - DEMO
• 然後之後的request你的browser都會把資訊
傳過去
Request
GET /comic_list HTTP/1.1
Host: comic.ensky.tw
Cookie: id=ensky; valid=1
所以server就知道你的狀態囉!
27. Cookie in PHP - Setting
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);
/* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/
~rasmus/", "example.com", 1);
28. Cookie in PHP - Getting
<?php
// Print an individual cookie
echo $_COOKIE["TestCookie"];
print_r($_COOKIE);
31. Cookie’s Problem - Solution
最簡單的方法呢,就是把cookie加密。
不告訴使用者加密的方法,
由server這邊逕行加密,導致使用者無法竄改資料。
http://stackoverflow.com/questions/1289061/best-
way-to-use-php-to-encrypt-and-decrypt
34. Session in PHP
• session destroy
$_SESSION = array();
session_destroy();
其他session操作、處理
http://www.php.net/manual/en/book.session.php
36. Cookie and session note
session_start()
會做的事情
1. 產生一組隨機的key string
2. 在response header裡面set-cookie:
session_key=key;
3. 讓$_SESSION陣列的內容mapping到對應的地
方(有可能是file, database, memory…)
37. Cookie and session note
我們知道,HTTP Response header一定在
response body之前送出。
因此,我們不能在set_cookie或者session_start
之前印出任何字串。
因為印字串代表送出Response Body,php就會
把Response Header先送出去,就來不及了XD
38. OO in PHP
雖然說PHP是簡單的script language,設計上
是一頁一頁,跑完就結束的script。
但是等到你開始寫中型網站的時候,若架構
上亂寫一通,會產生很多問題。
因此,PHP將OO的一些功能帶進來,給你規
劃架構的另外一個選擇。
39. OO in PHP - basic
<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
$instance = new SimpleClass;
$instance->displayVar();
40. OO in PHP – ctor / dtor
<?php
class CtorTestClass
{
function __construct ($msg = ‘’) {
echo “constructed, msg = $msg.”;
}
function __destruct () {
echo ‘destructed.’;
}
}
$instance = new CtorTestClass;
$instance1 = new CtorTestClass(‘haha’);
41. OO in PHP – inheritance
<?php
class Animal {
public $name;
function __construct ($name) {
$this->name = $name;
}
}
class Cat extends animal {
public function meow () {
echo $this->name . ‘: meow’;
}
}
$cat = new Cat(‘useless’);
46. Homework – on course
• 實作題 III:登入介面
http://vm2.ensky.tw/~ensky/03/index.php
現場做之 SPEC:
• 登入
• 帳號密碼寫死在code裡面
• 如果已經登入了還跑到登入頁面,會直接進內頁
• 如果還沒有登入卻想進內頁,會跑回登入畫面
• 要顯示錯誤型態(無帳號、密碼錯)
• 登入後內頁要顯示是誰登入的
• 登出
47. Homework – on course
• Useful function
– session相關 function
– isset
48. Homework – home
回家做之 SPEC:
• 註冊
– 使用CSV存使用者資料,不可使用資料庫
• 列出註冊者的帳號&密碼在首頁
• 現場做的所有SPEC都要維持住
• Userful Functions
– fopen
– fgetcsv
– fputcsv
– fclose