Tải bản đầy đủ (.pdf) (10 trang)

Lập trình web với PHP nâng cao

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (371.03 KB, 10 trang )

Nội dung

PHP nâng cao







Trần Thị Bạch Huệ




2

1

Chèn file








Hàm include()

Chúng ta có thể chèn nội dung của một file php vào


một file php khác trước khi server thực thi nó bằng
cách dùng hàm include() hoặc require().
Hai hàm này giống nhau về chức năng chỉ khác ở
cách kiểm soát lỗi.


3

Chèn file
Upload file
Sessions
Cookies
Error
Exception






Lấy tất cả nội dung trong file chỉ định chèn vào file
hiện hành.
Nếu có lỗi, hàm phát ra một warning nhưng script
vẫn tiếp tục thực thi.
Ví dụ 1:
vars.php

include() sinh lỗi nhưng script vẫn tiếp tục thực thi.
require() sinh lỗi thì script sẽ dừng việc thực thi.


test.php

Hai hàm này được dùng để chèn các hàm, các
headers, footers hay các phần tử sẽ được dùng lại
trong nhiều trang.

$color = 'green';
$fruit = 'apple';

?>

echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple

?>

4

1


Ví dụ 2:
function foo()
{
global $color;
include 'vars.php';

echo "A $color $fruit";
}
/* vars.php is in the scope of foo() so $fruit is NOT available out
side of this scope. $color is because we declared it as global*/

Ví dụ 3:
return.php
$var = 'PHP';
return $var;
?>



foo();
echo "A $color $fruit";



noreturn.php
$var = 'PHP';
?>

// A green apple
// A green

testreturns.php
$foo = include 'return.php';

echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>

?>

5

6

Hàm require()





Hàm require() có chức năng tương tự như hàm
include() nhưng khác nhau ở cách kiểm soát lỗi.
Khi gặp lỗi, hàm include() phát ra một warning
nhưng script vẫn tiếp tục thực thi trong khi hàm
require() phát ra một fatal error và dừng thực thi
script.
Ví dụ 1:



Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line

5
Warning: include() [function.include]:
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

include("wrongFile.php");
echo "Hello World!";
?>

7

Thông báo lỗi:

Hello World!

8

2





Lệnh echo vẫn được thực thi do Warning
không dừng việc thực thi của script.
Ví dụ 2:




Thông báo lỗi:
Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line
5
Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

require("wrongFile.php");
echo "Hello World!";
?>


9

Lệnh echo không được thực thi do fatal error đã
dừng việc thực thi của script.

10

Upload file






11

Để có thể upload files từ client lên server, chúng ta
dùng mảng kết hợp toàn cục $_FILES.
Mảng này chứa tất cả thông tin của file được upload
như tên file (name), loại file (type) hay kích cỡ file
(size),…
Chỉ số đầu tiên của mảng $_FILES là name của
input file trên form. Chỉ số thứ hai có thể là “name”,
“type”, “size”, “tmp_name” hoặc “error”.









$_FILES["file"]["name"] – Tên file cần upload
$_FILES["file"]["type"] – Loại file như “image/gif”
$_FILES["file"]["size"] – Kích cỡ file cần upload được tính
theo byte
$_FILES["file"]["tmp_name"] – Tên file tạm thời của bản
copy của file cần upload nằm trên server
$_FILES["file"]["error"] – Mã lỗi do upload file

Mặc định các files được lưu trữ tạm thời trong thư
mục tmp (temporary) trên server. Chúng sẽ bị xóa
khi trang web bị đóng. Để lưu trữ các files này,

chúng ta cần copy nó tới một nơi khác trên server.

12

3




Ví dụ:



<html>
<body>

if ($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "
";
}
else{
echo "Upload: " . $_FILES["file"]["name"] . "
";
echo "Type: " . $_FILES["file"]["type"] . "
";
echo "Size: ". ($_FILES["file"]["size"] / 1024)."
Kb
";
echo "Stored in: " . $_FILES["file"]["tmp_name"];

}
?>

enctype="multipart/form-data">
File name <input type="file" name="file" id="file" />


<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

13

14



Save file được upload:








Trang upload_file.php phía server có thể viết lại:

if ($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "
";
}else{
echo "Upload: " . $_FILES["file"]["name"] . "
";
echo "Type: " . $_FILES["file"]["type"] . "
";
echo "Size: ". ($_FILES["file"]["size"] / 1024)." Kb
";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
?>

Tức là di chuyển các files từ thư mục tmp đến thư
mục khác.
Dùng hàm move_uploaded_file có cú pháp:
bool move_uploaded_file(string $filename, string
$destination)

15

Trang upload_file.php phía server

filename: Tên file được upload (tên file cần copy).
destination: Nơi sẽ lưu trữ các file này (thư mục chuyển
đến)


16

4


Session




Ngoài ra, chúng ta có thể dùng hàm
file_exists để kiểm tra liệu file sắp upload có
tồn tại hay không?





bool file_exists ( string $filename )


filename: Đường dẫn tới file cần kiểm tra

(Tham khảo ví dụ trong help)
17



Tuy nhiên, việc lưu trữ này là tạm thời và chúng sẽ bị xóa

khi người dùng rời khỏi website.

18






19

Khi chúng ta mở một ứng dụng, thao tác trên nó rồi
đóng lại. Điều này giống như một Session. Tuy
nhiên, máy tính biết ta là ai.
Vấn đề này trên Internet thì khác. Web server không
biết chúng ta là ai và những gì chúng ta làm do địa
chỉ HTTP không nói lên điều đó.
Session giải quyết điều này bằng cách cho phép
chúng ta lưu trữ thông tin người dùng trên server
cho lần sử dụng sau (như username, họ tên,…).

Session làm việc bằng cách tạo ra một id
(UID – User ID) duy nhất cho mỗi người
viếng thăm và lưu trữ thông tin người dùng
này dựa trên id vừa tạo.
Thông tin được lưu trữ dùng chung cho tất
cả các trang trong một phiên làm việc.
UID được lưu trữ trong cookie hoặc được
truyền qua URL.




Bắt đầu một session




Bắt đầu một session bằng hàm session_start().
bool session_start( )
Hàm này tạo một session hoặc hồi phục lại
session hiện hành dựa trên id của session được
gởi trong yêu cầu GET hoặc POST, hoặc được
gởi kèm trong cookies.

20

5




Ví dụ 1:



<?php session_start(); ?>
<html>
<body>

</body>

</html>




22



Code của page2.php:
session_start();
?>
<html>
<body>
echo $_SESSION['favcolor'];
echo $_SESSION['animal'];
?>
</body>
</html>

23

<body>
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
//lưu trữ thông tin thứ 1

$_SESSION['animal'] = 'cat';
//lưu trữ thông tin thứ 2
echo '
<a href=“page2.php">page 2</a>';
?>
</body>

Đoạn mã trên đăng ký một session người dùng với
server, cho phép lưu trữ thông tin người dùng và
gán một user id (UID) cho session đó.

21

Lưu trữ thông tin người dùng vào session bằng cách sử dụng
mảng kết hợp $_SESSION.
Ví dụ 2: Trang page1.php có code như sau:



Ví dụ 3:


Tại trang page1.php tạo:


Output: greencat







Form đăng nhập gồm username và nút Sign in
Nếu người dùng nhập username và nhấn nút Sign in thì
thông báo “hello username”
Ngược lại thông báo “Bạn chưa đăng nhập”

Tại trang page2.php:


Kiểm tra và thông báo xem user này đã đăng nhập chưa

24

6




Trang page1.php:



<body>
<form action=“page1.php" method="post">
<input type="text" name="user">

<input type="submit" value="Sign in">
</form>
session_start();

if (isset($_POST['user'])){
$_SESSION['user']=$_POST['user'];
echo "Chào mừng ".$_POST['user'];
}else
echo 'Bạn chưa đăng nhập';
?>
</body>

25

<body>
session_start();
if (isset($_SESSION['user']))
echo "Đăng nhập rồi";
else
echo "Chưa đăng nhập";
?>
</body>

26



Xóa dữ liệu được đăng ký cho session:



Một số hàm liên quan đến session:
Session_decode

Session_encode
– Session_id
– Session_name
– Session_register
– Session_save_path
– Session_unregister
– Session_unset
(sinh viên tìm hiểu thêm)


Xóa một vài dùng hàm:
void unset(mixed $var [, mixed $var [, mixed $... ]])





Xóa tất cả:
bool session_destroy(void)
(Tham khảo ví dụ trong help)


27

Trang page2.php:

28

7



Bài tập


Cookie

Tại trang page2.php của ví dụ 3, viết mã đáp
ứng yêu cầu:






Kiểm tra xem user có đăng nhập chưa?
Nếu đăng nhập rồi thì hiển thị siêu liên kết Sign
out để người dùng thoát khỏi việc đăng nhập trên.
Nếu chưa đăng nhập thì thông báo.




29

Cookie là một tập tin nhỏ, được server ghi
trên máy tính người dùng. Mỗi lần máy tính
đó yêu cầu một trang với cùng trình duyệt
web, nó cũng sẽ gởi cookie kèm theo.
Chúng ta có thể tạo cookie bằng cách sử
dụng hàm setcookie() hoặc setrawcookie().

Chú ý: Hàm tạo cookie phải được đặt trước
thẻ <html>.

30



Cú pháp hàm setcookie:



expire: Thời gian cookie hết hiệu lực.


setcookie(name, value, expire, path, domain)




31



Bạn nên dùng hàm time() cộng với số giây mà cookie hết
hiệu lực để làm giá trị truyền vào tham số này.
Ví dụ:


Chú ý: Tham số value, expire, path, domain có
thể bỏ qua.

name: Tên của cookie.
value: Giá trị của cookie.





setcookie(“user”,”alex”,time()+60);//hết hiệu lực trong vòng 1
phút
setcookie(“user”,”alex”,time()+60*60*24*30);//hết hiệu lực
trong vòng 30 ngày

Nếu tham số này là 0 hoặc bị bỏ qua, cookie sẽ hết hiệu lực
lúc kết thúc session (hay khi trình duyệt bị đóng).

32

8




path: Chỉ ra các thư mục trên server mà
cookie có thể sử dụng.







Giá trị mặc định của tham số này là thư mục hiện
hành.

Để cookie có thể sử dụng trong tất cả các miền con của
miền example.com, truyền giá trị ‘.example.com’ cho
tham số domain.
Nếu truyền ‘www.example.com’ cho tham số domain thì
chỉ có miền con www mới có thể sử dụng cookie.

34



Truy lục giá trị cookie:





Sử dụng mảng kết hợp $_COOKIE
Ví dụ: Code của trang page3.php

Code của trang page4.php cho thấy cách truy lục lại
giá trị lưu trong cookie.
<body>
// In một giá trị cookie
echo $_COOKIE["user"];


$value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);//1 giờ hết hạn
setcookie("TestCookie", $value, time()+3600, "/test/",
".example.com");
?>

35

Ví dụ:


Nếu đặt dấu ‘/’, cookie có thể sử dụng trên toàn domain.
Nếu đặt ‘/foo/’, cookie chỉ có thể sử dụng trong thư mục
foo và các thư mục con của foo trong domain.

33

domain: Miền mà cookie có thể sử dụng.


Ví dụ:






// In tất cả
print_r($_COOKIE);

?>
</body>

36

9


Bài tập


Xóa cookie

1.

Ví dụ:

2.



setcookie(“user”, “”,time()+60);
?>

Kiểm chứng lại các ví dụ
Cho phép người dùng lưu password mỗi khi
đăng nhập (sign in)




Tạo form đăng nhập gồm username và
password
Khi người dùng điền thông tin và nhấn nút Sign
in, hỏi người dùng có muốn lưu pass hay
không?



37

38

Error và Exception


39

Nếu đồng ý, lưu vào cookie và thông báo đã lưu rồi
Nếu không, thông báo “pass không được lưu”

Hết

Sinh viên tự nghiên cứu phần này

40

10




×