Bài giảng Phát triển ứng dụng web - PHP Advances
Tóm tắt Bài giảng Phát triển ứng dụng web - PHP Advances: ...e", "", time() -3600); 3.3 Ví dụ Cookie cookie setcookie $_COOKIE[fieldName] Client Lưu username & password Webserver 3.4 Session là gì? 28 User 1 User 2 User 3 Session: user 1 Session: user 2 Session: user 3 3.4 Session là gì? Là thông tin về client được server lưu trên máy của s...- 3 letter day (Mon - Sun) l - full name of day (Monday - Sunday) N - 1=Monday, 2=Tuesday, etc (1-7) S - suffix for date (st, nd, rd) w - 0=Sunday, 1=Monday (0-6) z - day of the year (1=365) WEEK W - week of the year (1-52) MONTH F - Full name of month (January - December) m - 2 digi..._get("include_path")); ini_set("include_path", "/inc"); // Works in all PHP versions var_dump(ini_get("include_path")); ini_restore("include_path"); var_dump(ini_get("include_path")); ?> 49 5. Xử lý tập tin & thư mục (tt) file_exist(), is_file(), is_dir(), is_readable(), is_writeable(),...
1PHP Advances Luong Tran Hy Hien, FIT of HCMUP Nội dung 1. Hướng đối tượng 2. Truyền nhận dữ liệu (POST/GET) 3. Cookies, Sessions 4. Xử lý ngày tháng 5. Xử lý tập tin & thư mục 6. Upload tập tin lên Server 7. Hình ảnh 8. E-mail, Secure E-mail 9. Xử lý lỗi 2 1. Hướng đối tượng • Khai báo lớp • Hàm tạo • Phạm vi • Kế thừa • Hàm serialize,unserialize 3 1. Hướng đối tượng (tt) • Khai báo • Hàm tạo 4 51. Hướng đối tượng (tt) • Khai báo lớp class tên_lớp { các thuộc tính và phương thức } • Tạo và hủy một đối tượng $tên_biến = new tên_lớp(); Đối tượng sẽ tự động bị hủy khi không còn tham chiếu nào đến nó $tên_biến = NULL; 1. Hướng đối tượng (tt) • Các từ khóa khai báo: – public: có thể sử dụng bên ngoài lớp – private: chỉ sử dụng cục bộ bên trong lớp – protected: sử dụng được bởi các lớp kế thừa • Một số quy tắc chung: – Không thể khai báo hai method trùng tên – Method phải được khai báo ngay bên trong khai báo lớp – Dùng biến giả $this để truy xuất các member và method trong lớp – Dùng toán tử -> để truy xuất đến member và method 6 1. Hướng đối tượng (tt) • Khai báo constructor và destructor public function __construct(danh sách tham số) { khởi tạo giá trị các member } constructor được tự động thực hiện khi đối tượng được tạo public function __destruct() { dọn dẹp } destructor được tự động thực hiện khi đối tượng bị hủy 7 7 81. Hướng đối tượng (tt) 1. Hướng đối tượng (tt) • Khai báo const TÊN_HẰNG = giá trị; • Truy xuất tên_lớp::TÊN_HẰNG // ngoài lớp seft::TÊN_HẰNG // trong lớp 9 1. Hướng đối tượng (tt) • Khai báo static $thuộc_tính • Truy xuất tên_lớp::$thuộc_tính// ngoài lớp seft::$thuộc_tính // trong lớp 10 1. Hướng đối tượng (tt) • Khai báo – static function phương_thức() • Truy xuất – tên_lớp::phương_thức() // ngoài lớp – seft:: phương_thức() // trong lớp 11 1. Hướng đối tượng (tt) • Khai báo lớp con class lớp_con extends lớp_cha { các thuộc tính và phương thức } Tất cả các member và method được khai báo public hay protected trong lớp cha được thừa kế và có thể sử dụng trong lớp con 12 Phương thức nạp chồng • Gọi một method lớp cha parent::phương_thức() Bằng cách định nghĩa lại một phương thức đã có ở lớp cha, tất cả các lời gọi đến phương thức này mà không chỉ định rõ như trên sẽ được hiểu là gọi phương thức có cùng tên của lớp con 13 Sự đa hình • Khai báo lớp trừu tượng abstract class lớp_trừu_tượng { // các thuộc tính abstract public function phương_thức_trừu_tượng(); // các phương thức khác } Không thể tạo đối tượng trực tiếp từ lớp trừu tượng Lớp con bắt buộc phải định nghĩa các phương thức trừu tượng của lớp cha 14 Ngăn kế thừa và nạp chồng • Lớp không thể kế thừa final class không_thể_kế_thừa { } • Phương thức không thể nạp chồng final public function không_thể_nạp_chồng() { } 15 interface • Khai báo Interface interface giao_diện { public function phương_thức(); } • Khai báo lớp theo mẫu Interface abstract class tên_lớp implements giao_diện { } Các lớp sử dụng Interface hay kế thừa từ một lớp sử dụng Interface bắt buộc phải định nghĩa tất cả các phương thức trong Interface đó 16 17 1. Hướng đối tượng (tt) 18 1. Hướng đối tượng (tt) 1. Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu thông tin của đối tượng 2. Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize() <?php class AClass { var $a; function AClass() { } }; $ob1 = new AClass(); $ob1->a = 10; $ob1->b = 100; $ob1->c = “Nguyen Ngoc Thuy Hang"; $luu = serialize($ob1); echo "$luu "; $ob2 = unserialize($luu); var_dump($ob2); ?> 2. Truyền nhận dữ liệu (POST/GET) 2.1 Cơ chế truyền nhận dữ liệu 2.2 Các cách truyền nhận dữ liệu 19 Cơ chế truyền nhận dữ liệu 2 Internet or Intranet www.example.com Webserver 7Yêu cầu trang b.php Cơ chế truyền nhận dữ liệu ? 7www.example.com Webserver Cơ chế truyền nhận dữ liệu 2 Internet or Intranet Yêu cầu trang xlDangnhap.php Textbox : txtDangnhap Password Box: txtDangnhap txtDangnhap = admin txtDangnhap = phpAdmin 2. Truyền nhận dữ liệu (POST/GET) • Trang web nhập dữ liệu – Cách 1: truyền dữ liệu trực tiếp qua url • Sử dụng liên kết để sửa lại url • Thông qua đối tượng location – Cách 2: truyền dữ liệu thông qua form • Sử dụng đối tượng • Nhập liệu thông qua các formfield • Thực hiện việc truyền dữ liệu thông qua submit • Hai phương thức gởi dữ liệu GET / POST • Trang web nhận dữ liệu (dùng các biến toàn cục) – Cách 1: $_GET[“biến”] – Cách 2: $_POST[“biến”] – Cách 3: $_REQUEST[“biến”] 23 3. Cookies, Sessions 3.1 Cookies là gì? 3.2 Sử dụng cookies 3.3 Ví dụ Cookies 3.4 Session là gì? 3.5 Sử dụng session 3.6 Ví dụ session 24 3.1 Cookies là gì? Là những mẫu 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 kèm file cookie đã lưu lần trước lên server. Việc xử lý thông tin (lưu, lấy) trong cookie do server thực hiện. Thường được sử dụng để lưu thông tin cá nhân của client. 25 Webserver cookie setcookie $_COOKIE Client 3.2 Sử dụng cookies • 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 : Thời điểm mà cookie hết hiệu lực • path : Đường dẫn trên server mà cookie có hiệu lực • 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); 3.3 Ví dụ Cookie cookie setcookie $_COOKIE[fieldName] Client Lưu username & password Webserver 3.4 Session là gì? 28 User 1 User 2 User 3 Session: user 1 Session: user 2 Session: user 3 3.4 Session là gì? Là thông tin về client được server lưu trên máy của server Sử dụng session 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 Webserver Cookie: PHPSESSID session_start $_SESSION[sessionVar] Client 3.5 Sử dụng session • Khởi động Session session_start(); • Ghi & Đọc giá trị Session $_SESSION[“sessionVar”] = $value ; $_SESSION[“sessionVar”] = array(); $_SESSION[“sessionVar”][] = $value; if (isset($_SESSION[“sessionVar"]) echo $_SESSION[“sessionVar"]; • Hủy Biến trong Session unset($_SESSION[“sessionVar”]); • Hủy cả Session session_destroy(); 30 3.6 Ví dụ : Đếm số lần duyệt trang web <?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.”; ?> 3.6 VD2: Ứng dụng cho Login • 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”] = true/false : 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 cho Login – Gồm 4 bước 1. Tạo trang login.html yêu cầu người dùng đăng nhập. 2. Tạo trang validateuser.php xử lí thông tin đăng nhập từ trang login.htm – Kết nối với CSDL, kiểm tra thông tin đăng nhập có hợp lệ hay không ? • Nếu không hợp lệ thì cho redirect về trang login.html. • Nếu hợp lệ thì dùng một biến trong Session để lưu trạng thái login thành công – Ví dụ: $_SESSION[“IsLogin”] = true. – Lưu ý: Phải đặt giá trị mặc định cho biến Session này là false 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 ($_SESSION[“IsLogin”] = false). Session - Ứng dụng cho Login 4. Trong tất cả các trang muốn bảo mật, thêm đoạn mã sau để kiểm tra người dùng đã đăng nhập hay chưa, nếu chưa thì redirect lại trang login.html <?php session_start(); if (!isset($_SESSION[“IsLogin”]) || $_SESSION[“IsLogin”] == false) header(“Location: login.htm”); ?> Giỏ hàng (shopping cart) Session : Array : Mathang [ ] Session : Array : Soluong[ ] {‘Book1’, ‘Book2’, ‘Book3’} {13, 2, 7} Xóa biến trong Session Ghi xuống CSDL Session – Cookie – Database Internet or Intranet Web Server Database Server Client 3 Client 2 Client 1 Cookie3 Cookie2 Cookie1 Session 2 Session 3 Session 1 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 Nhiều Nhiều Session Server Ngắn 1 Nhiều Cookies Client Dài 1 Nhiều Break 38 4. Xử lý ngày tháng 39 4. Xử lý ngày tháng <?php // Assuming today is: March 10th, 2001, 5:16:18 pm $today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm $today = date("m.d.y"); // 03.10.01 $today = date("j, n, Y"); // 10, 3, 2001 $today = date("Ymd"); // 20010310 $today = date('h-i-s, j-m-y, it is w Day z '); // 05-16-17, 10-03-01, 1631 1618 6 Fripm01 $today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day. $today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2001 $today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month $today = date("H:i:s"); // 17:16:17 ?> DAYS d - day of the month 2 digits (01-31) j - day of the month (1-31) D - 3 letter day (Mon - Sun) l - full name of day (Monday - Sunday) N - 1=Monday, 2=Tuesday, etc (1-7) S - suffix for date (st, nd, rd) w - 0=Sunday, 1=Monday (0-6) z - day of the year (1=365) WEEK W - week of the year (1-52) MONTH F - Full name of month (January - December) m - 2 digit month number (01-12) n - month number (1-12) M - 3 letter month (Jan - Dec) t - Days in the month (28-31) YEAR L - leap year (0 no, 1 yes) o - ISO-8601 year number (Ex. 1979, 2006) Date and time formats 40 TIME a - am or pm A - AM or PM B - Swatch Internet time (000 - 999) g - 12 hour (1-12) G - 24 hour c (0-23) h - 2 digit 12 hour (01-12) H - 2 digit 24 hour (00-23) i - 2 digit minutes (00-59) s - 2 digit seconds (00-59) OTHER e - timezone (Ex: GMT, CST) I - daylight savings (1=yes, 0=no) O - offset GMT (Ex: 0200) Z - offset in seconds (-43200 - 43200) r - full RFC 2822 formatted date <?php echo date (‘g:i:s A’); ?> 11:19:26 PM Date and time formats 41 5. Xử lý tập tin & thư mục 1. Sử dụng include() 2. Sử dụng include_once() 3. Sử dụng include_path cho các dự án lớn 4. Kiểm tra file 5. Đọc, ghi file 6. Làm việc với thư mục 42 5. Xử lý tập tin & thư mục (tt) • include(): – sử dụng để chia sẻ các hàm dùng chung, các đoạn mã chung trong một project có nhiều file. – khác cú pháp #include của ngôn ngữ C, lệnh này không chèn mã lệnh vào file mà thực thi file php giống như cú pháp gọi hàm. – thông báo warning nếu không tìm thấy file nhưng không dừng chương trình. • require() - tương tự include(), lệnh này có sự khác biệt là sẽ dừng ngay chương trình khi không tìm thấy file. 43 44 5. Xử lý tập tin & thư mục (tt) //vars.php <?php $color = 'green'; $fruit = 'apple'; ?> //test.php <?php echo "A $color $fruit"; // A include 'vars.php'; echo "A $color $fruit"; // A green apple ?> <?php return 4 + 4; ?> ------------------------------------ <?php echo "This is from file 2"; $retVal = include("file1.php"); echo “Value file 1: $retVal"; echo "This is from file 2\n"; ?> Vì include() thực hiện lời gọi đến file php, do đó bạn có thể trả về giá trị từ file PHP được include 5. Xử lý tập tin & thư mục (tt) • Có thể đặt lệnh include bên trong 1 cấu trúc điều kiện hoặc cấu trúc lặp, • Tùy theo điều kiện của cấu trúc mà include() có được thực hiện hay không, 1 hay nhiều lần, • Việc này giúp hỗ trợ cho việc thiết kế kiến trúc trang web tốt hơn. 45 5. Xử lý tập tin & thư mục (tt) • include_once() giống như include(), tuy nhiên có điểm khác biệt là chỉ include 1 lần, lần sau nếu gặp lại file này thì ko include nữa • include_once() phân biệt chữ hoa, chữ thường <?php include_once("a.php"); // this will include a.php include_once("A.php"); // this will include a.php again on Windows! ?> Vì phân biệt chữ hoa/thường nên include_one chèn thêm lần thứ hai 47 5. Xử lý tập tin & thư mục (tt) • include file theo đường dẫn tuyệt đối: Cách này dở vì khi cài đặt trên máy khác sẽ không tìm thấy file được include • include file theo đường dẫn tương đối: Cách này tốt hơn, nhưng mỗi khi đổi vị trí của file được include thì phải sửa lại tại tất cả các file thực hiện lời gọi include • Cách tốt nhất là sử dụng include_path (thiết lập trong file PHP.INI) đối với những file thư viện dùng chung được sử dụng nhiều (giống như đối với ngôn ngữ C) 5. Xử lý tập tin & thư mục (tt) 48 thay đổi include_path trong PHP.INI dùng lệnh set_include_path() <?php var_dump(get_include_path()); set_include_path('/inc'); // Works as of PHP 4.3.0 var_dump(get_include_path()); restore_include_path(); var_dump(get_include_path()); ?> dùng lệnh ini_set() <?php var_dump(ini_get("include_path")); ini_set("include_path", "/inc"); // Works in all PHP versions var_dump(ini_get("include_path")); ini_restore("include_path"); var_dump(ini_get("include_path")); ?> 49 5. Xử lý tập tin & thư mục (tt) file_exist(), is_file(), is_dir(), is_readable(), is_writeable(), is_executable(), filesize(), fileatime() <?php function outputFileTestInfo( $file ) { if ( ! file_exists( $file ) ) { print "$file does not exist"; return; } print "$file is ".(is_file( $file )?"":"not ")."a file\n"; print "$file is ".(is_dir( $file )?"":"not ")."a directory\n"; print "$file is ".(is_readable( $file )?"":"not ")."readable\n"; print "$file is ".(is_writable( $file )?"":"not ")."writable\n"; print "$file is ".( filesize($file))." bytes\n"; print "$file was accessed on ".date( "D d M Y g:i A", fileatime($file )).""; print "$file was modified on ".date( "D d M Y g:i A", filemtime( $file)).""; print "$file was changed on".date( "D d M Y g:i A", filectime($file)).""; } outputFileTestInfo("c:\\windows\\system32\\cmd.exe"); ?> 5. Xử lý tập tin & thư mục (tt) fopen($filename, $mode); fwrite($handle, $string); fread($handle, $length); fgets($handle); sprintf($format); fscanf($handle, $format); fseek($handle, $offset); fclose($handle); file_get_contents($filename); 50 51 5. Xử lý tập tin & thư mục (tt) <?php $var1 = 10; $var2 = "This is a String"; $var3 = true; $f = fopen("test.txt", "wt"); fwrite($f, "$var1 $var2 $var3\n"); fwrite($f, "$var1\n$var2\n$var3\n"); fclose($f); echo "Read line by line......\n"; $f = fopen("test.txt", "rt"); while (!feof($f)) { $line = fgets($f); echo "$line"; } fclose($f); echo "Read all file by fread......\n"; $f = fopen("test.txt", "rb"); $myfile = fread($f, filesize("test.txt")); echo $myfile; fclose($f); echo "Read all file......\n"; $myfile = file_get_contents("test.txt"); echo($myfile); ?> 52 5. Xử lý tập tin & thư mục (tt) <?php $var1=10; $var2=100; $var3=100.3434; $var4="Test string"; $f=fopen("test.txt", "wt"); fwrite($f, sprintf("%d %10.3f %10.3lf\n\r", $var1, $var2, $var3)); fwrite($f, sprintf("%s", $var4)); fclose($f); $f=fopen("test.txt", "rt"); if (list($v1, $v2, $v3, $v4) = fscanf($f, "%d %f %lf\n\r%s")) { var_dump($v1); var_dump($v2); var_dump($v3); var_dump($v4); } $v4 = fgets($f); var_dump($v4); fclose($f); ?> 53 5. Xử lý tập tin & thư mục (tt) <?php class AClass { }; $ob1 =& new AClass(); $ob1->a = 10; $ob1->b = 100.023; $ob1->c = "Test String"; var_dump($ob1); $f = fopen("test.txt", "wb"); fwrite($f, serialize($ob1)); fclose($f); $f = fopen("test.txt", "rb"); $ob2 = unserialize(fgets($f)); fclose($f); var_dump($ob2); ?> 54 5. Xử lý tập tin & thư mục (tt) • mkdir(), rmdir() • opendir(), readdir(), closedir() <?php $dir=opendir("c:\\windows"); while ($file=readdir($dir)) { echo "$file\n"; } closedir($dir); ?> 6. Upload tập tin lên server • Gửi các file lên server (upload) là một chức năng không thể thiếu đối với các ứng dụng Web- based. • Để form có thể upload file, ta phải xác định thuộc tính enctype của form có giá trị "multipart/form-data”. • Với PHP, bạn có thể xác định kích thước lớn nhất của file upload bằng cách đặt thêm 1 hidden field có tên MAX_FILE_SIZE trước control file. 55 6. Upload tập tin lên server Webserver Internet or Intranet Yêu cầu trang upload.php Disk driver file Upload.php • $_FILES[“file”]["name"] • $_FILES[“file”]["type"] • $_FILES[“file”]["size"] • $_FILES[“file”]["tmp_name"] • $_FILES["file”]["error"] 57 6. Upload tập tin lên server Element Contains Example $ FILES['taptin']['name'] Name of uploaded file test.gif $_FILES['taptin']['tmp_name'] Path to temporary file /tmp/phprDfZvN $_FILES['taptin']['size'] Size (in bytes) of uploaded file 6835 $_FILES['taptin']['error'] An error code corresponding to a PHP constant UPLOAD_ERR_FO RM_SIZE $_FILES['taptin']['type'] MIME type of uploaded file (where given by client) image/gif Mảng $_FILE 58 Constant Name Value Explanation UPLOAD_ERR_OK 0 No problem UPLOAD_ERR_INI_SIZE 1 File size exceeds php.ini limit set in upload_max_filesize UPLOAD_ERR_FORM_SIZE 2 File size exceeds limit set in hidden element named MAX_FILE_SIZE UPLOAD_ERR_PARTIAL 3 File only partially uploaded UPLOAD_ERR_NO_FILE 4 File was not uploaded 6. Upload tập tin lên server Mã lỗi 59 6. Upload tập tin lên server 60 6. Upload tập tin lên server Kiểm tra lỗi, định dạng, kích thước File upload • Lưu ý : – $_FILES[“”][“type”] • “image/gif” • “image/jpeg” Firefox nhận đây là file jpeg • “image/pjpeg” IE nhận đây là file jpeg – $_FILES[“”][“size”] : Kích thước file tính theo byte – $_FILES[“”][“error”] : Mã lỗi khi upload File • = 0 : Không có lỗi • > 0 : Có lỗi 62 7. Hình ảnh Vẽ ảnh từ văn bản 8. E-mail, Secure E-mail • Sử dụng thư viện open source: PHP Mailer • Chép 3 file: class.phpmailer.php, class.smtp.php, phpmailer.lang-en.php vào thư mục web của site 63 Gởi email sử dụng Mail Server của GMail 9. Xử lý lỗi • Sử dụng trycatch try { // do something that can go wrong } catch (Exception $e) { throw new Exception( 'Something really gone wrong', 0, $e); } 65 Toán tử điều khiển lỗi • Toán tử điều khiển lỗi (@) dùng để đặt trước các hàm,biểu thức. Khi đó tất cả các thông báo lỗi trong hàm, biểu thức đó bị bỏ qua. • Ví dụ: <?php $b = @file(“a ag a”) or die(“Khong the mo file”); ?> 66 Tham khảo • Website W3school • Slide lập trình Web, ĐH KHTN, 2007 67 Q & A THE END
File đính kèm:
- bai_giang_phat_trien_ung_dung_web_php_advances.pdf