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
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:
- Bài giảng Lập trình Web - PHP nâng cao.pdf