Bài giảng Lập trình Web - PHP nâng cao

Cơ chế Upload File

Thiết kế Form cho phép Upload File

Xử lý Lưu File upload lên server

Kiểm tra lỗi, định dạng, kích thước File

upload

pdf31 trang | Chuyên mục: PHP | Chia sẻ: dkS00TYs | Lượt xem: 2322 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng Lập trình Web - PHP nâng cao, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
: POST
 Enctype: multipart/form-data
--- UploadForm.htm ---
<FORM method="POST" action=“upload.php“ 
enctype="multipart/form-data">
Thiết kế Form cho phép Upload File
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
6
 move_uploaded_file(tmp_name, saved_name)
--- Upload.php ---
<?php
move_uploaded_file( $_FILES["file"]["tmp_name"], 
"upload/" . $_FILES["file"]["name"]); 
echo "Upload: " . $_FILES["file"]["name"] . "";
echo "Type: " . $_FILES["file"]["type"] . "";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . 
“Kb";
echo “Temp. Stored in: " . $_FILES["file"]["tmp_name"];
?>
Xử lý lưu File lên File System trên Server
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
7
--- Upload.php ---
<?php
if (($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo “Error Code: " . $_FILES["file"]["error"] . 
"";
}
else{ // Xu ly luu file }
}
?>
Kiểm tra lỗi, định dạng và kích thước file
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
8
PHP Warning: 
move_uploaded_file(upload/14.jpg) 
[function.move-uploaded-file]: 
failed to open stream: Permission 
denied in .
Cấu hình phân quyền WRITE cho thư mục Upload
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
9
 Cơ chế gửi Email
 Gửi mail sử dụng Outlook
 Gửi mail sử dụng Web Mail
 PHP mail() – Non Authentication
 PHP PEAR package – SMTP 
Authentication
Gửi Email
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
10
Mail Client
Web Server
Cơ chế gửi email
Internet /
Intranet 
Internet /
Intranet 
mail(to,subject,message…)
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
11
Ví dụ cấu hình gửi email sử dụng GMAIL
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
12
 Sử dụng mailto
 Format: mailto:address[?key=setting][&key=setting] … 
Key Ý nghĩa
SJT Tiêu đề Email
CC Danh sách địa chỉ Email người nhận, mỗi địa chỉ cách nhau bằng dấu chấm phẩy (;).
BCC Danh sách địa chỉ Email người nhận được ẩn mỗi địa chỉ cách nhau bằng dấu chấm phẩy (;).
BODY Nội dung Email.
Gởi mail sử dụng cấu hình trong Mail-Client
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
13
 mail(to,subject,message,headers,parameters)
Key Specifies
TO Địa chì email người nhận
SUBJECT Tiêu đề Email (KHÔNG được chứa ký tự xuống dòng)
MESSAGE Nội dung Email
HEADERS
Thông tin thêm (vd: FROM, BCC, CC,…) Các thông tin này nên phân cách nhau 
bằng ký tự xuống dòng (\r\n)
PARAMETERS Tham số cấu hình cho ứng dụng gửi mail
Sử dụng PHP mail() – Non Authentication
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
14
 Cấu hình mặc định được định nghĩa trong file 
php.ini
Default Ý nghĩa
SMTP localhost DSN hoặc IP Address của SMTP 
Server
smtp_port 25 Port của SMTP
sendmail_from NULL Địa chỉ người gửi
sendmail_path NULL Đường dẫn đến ứng dụng gửi mail 
(UNIX)
Cấu hình chuẩn của PHP mail() – Non Authentication
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
15
<?php
// định nghĩa email người nhận
$to = ‘noname@yahoo.com';
// tiêu đề
$subject = 'Test email';
// nội dung email
$message = "Hello World!\n\nThis is my first mail.";
// định nghĩa email người gửi và email trả lời
$headers = "From: mymail@yahoo.com\r\n" . 
"Reply-To: replymail@yahoo.com";
// gửi email
$mail_sent = @mail( $to, $subject, $message, $headers );
// kiểm tra gửi thành công và thông báo
echo $mail_sent ? "Mail sent" : "Mail failed";
?>
Ví dụ
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
16
1. Sử dụng PEAR package Mail.php
 require_once(‘Mail.php’);
2. Khởi tạo thể hiện để gửi mail sử dụng Mail::factory()
 $smtp = Mail::factory(‘smtp’, $params);
 $params[“host”] = “hostname”;
 $params[“auth”] = true;
 $params[“username”] = “smtp_username”;
 $params[“password”] = “smtp_password”;
3. Gửi mail sử dụng hàm send() 
 $mail = $smtp->send($to, $headers, $message)
 $headers['From'] = 'from@example.com';
 $headers['To'] = $to;
 $headers['Subject'] = 'Test message';
 $headers['Cc'] = 'cc@example.com';
 $headers['Reply-To'] = 'from@example.com'; 
4. Kiểm tra lỗi gửi mail
 if (PEAR::isError($mail)) 
echo($mail->getMessage());
Gởi mail sử dụng PHP Pear package – SMTP Authentication
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
17
<?php 
require_once "Mail.php";
$host = “smtp.gmail.com";
$username = “ttbhanh@gmail.com";
$password = "smtp_password";
$to = “noname@yahoo.com”;
$headers = array ('From' => ’ttbhanh@gmail.com’,
'Subject' => ‘Test send mail’);
$smtp = Mail::factory('smtp', array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, ‘this is my message’);
if (PEAR::isError($mail)) 
echo($mail->getMessage());
else
echo("Message successfully sent!");
?> 
Ví dụ
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
18
 Là 1 tập tin được server lưu xuống máy của
client
 Mỗi lần client gửi request 1 trang web, đồng
thời sẽ gửi file cookie này lên server
 Các điều khiển xử lý thông tin (lưu, lấy) do
server thực hiện
 Thường được sử dụng để lưu thông tin cá nhân
của client
Webserver
cookie
setcookie
$_COOKIE
Client
Cookies
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
19
 Lệnh ghi cookie
 setcookie(name, value, expire, path, domain);
 setrawcookie(name, value, expire, path, domain);
 Name: tên cookie
 Value: giá trị cookie
 Expire: ngày/khoảng thời gian hết hạn hết hạn
 Path : đường dẫn mà cookie được gởi đi
 Domain : xác định tên miền mà cookie được gởi đi
 Bắt buộc phải xuất hiện trước thẻ 
 Lấy giá trị cookie
 echo $_COOKIE[“cookieName"];
 Xóa cookie
 setcookie(“cookieName", "", time()-3600);
Sử dụng cookies
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
20
 Lưu thông tin đăng nhập
cookie
setcookie
$_COOKIE[fieldName]
Client
Lưu username & password
Ví dụ cookies
Webserver
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
21
 Là thông tin về client được server lưu trên máy
của server
 Sử dụng cookie lưu định danh duy nhất cho từng
client
 Mục đích lưu biến dữ liệu dùng chung cho nhiều
trang trong 1 phiên làm việc của client
Cookie: PHPSESSID
session_start
$_SESSION[sessname]
Client
Session
Webserver
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
22
 Khởi động Session
 session_start();
 Bắt buộc phải xuất hiện trước thẻ 
 Ghi & Đọc giá trị Session
 $_SESSION[“sessionName”] = value
 $_SESSION[“sessionName”][ ] = array(…)
 if (isset($_SESSION[“sessionName"])
echo $_SESSION[“sessionName"];
 Hủy Session
 session_destroy();
Sử dụng session
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
23
 Cấu hình trong php.ini
 ini_set(‘parameter’, value);
 Gọi trước hàm session_start();
Parameter Default
session.auto_start 0 Không tự động
session.cookie_lifetime 0 Tồn tại cho đến khi 
đóng browser
session.name PHPSESSID Tên biến cookie
…
Cấu hình session
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
24
 Đếm số lần duyệt 1 trang web của 1 user
<?php
session_start( );
if (isset($_SESSION["count"]))
$_SESSION["count"] = $_SESSION["count"] + 1;
else
$_SESSION["count"] = 1;
print "You've looked at this page " . 
$_SESSION['count'] . ' times.';
?>
Ví dụ session
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
25
 Làm thế nào để ngăn không cho người dùng
truy cập vào các trang web nếu chưa đăng
nhập?
 Ý tưởng: Dùng các biến Session để lưu trạng
thái đăng nhập của người dùng:
 $_SESSION[“IsLogin”] = 0/1 : Lưu trạng thái đăng
nhập
 $_SESSION[ “Username”] : Lưu Tên đăng nhập
 $_SESSION[ “Authentication”] : Lưu Loại quyền
đăng nhập
 …
Ứng dụng session
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
26
1. Tạo trang login.htm yêu cầu người dùng đăng nhập.
2. Tạo trang validateuser.php là trang xử lí thông tin đăng nhập từ
trang login
 Kết nối với CSDL, kiểm tra xem thông tin đăng nhập có đúng hay
không.
 Nếu không đúng thì cho redirect đến trang login.htm.
 Còn nếu ĐÚNG thì dùng một biến Session để lưu trạng thái login
thành công lại.
 Ví dụ $_SESSION["IsLogin“] = 1.
 Lưu ý là phải đặt giá trị mặc định cho biến này là 0 khi khởi tạo
một Session.
3. Tạo trang logout.php là trang xử lý khi người dùng logout
 Reset trạng thái login là chưa đăng nhập
Bắt người dùng truy cập web sau đăng nhập
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
27
4. Trong tất cả các trang muốn bảo mật, phải thêm đoạn mã
sau để kiểm tra người dùng đã login hay chưa, nếu chưa
thì redirect lại trang login.htm
<?php 
session_start();
if ($_SESSION["IsLogin“] != 1) 
header(“Location: login.htm“);
?>
Bắt người dùng truy cập web sau đăng nhập
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
28
Thông tin chia sẽ Vị trí 
lưu trữ
Thời gian 
tồn tại
Số client Số trang web 
sử dụng
Database/File Server Dài N N
Session Server Ngắn 1 N
Cookies Client Dài 1 N
Clients Web servers
cookies
cookies
So sánh
Database/File
Session (client1)
Session (client2)
Internet /
Intranet 
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
29
Tham khảo
 PHP Cookbook, 2nd Edition,David Sklar &
Adam Trachtenberg , O'Reilly , 2006
 Learning PHP and MySQL, Michele Davis & Jon Phillips ,
O'Reilly, June 2006
 Learning PHP 5, David Sklar, O'Reilly, June 2004
 
 
 Google ….
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
30
Lập Trình Web
THỰC HÀNH
PHP Nâng Cao
ĐẠI HỌC SÀI GÒN – KHOA CNTT
GV: Trần Đình Nghĩa
tdnghia1977@gmail.com
TH
IẾ
T 
K
Ế
 V
À
 L
Ậ
P
 T
R
ÌN
H
 W
E
B
31
Bài thực hành PHP – Lập trình với CSDL
 Xem demo một số ví dụ
 Code lại các bài đã minh hoạ

File đính kèm:

  • pdfBài giảng Lập trình Web - PHP nâng cao.pdf
Tài liệu liên quan