1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Mã nguồn mở: Chương 5 - ThS. Nguyễn Minh Thành

49 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ngôn Ngữ Kịch Bản PHP Nâng Cao
Người hướng dẫn ThS. Nguyễn Minh Thành
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Các Hệ Thống Mã Nguồn Mở
Thể loại bài giảng
Định dạng
Số trang 49
Dung lượng 438,83 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nội dung trình bày trong chương 5 Ngôn ngữ kịch bản PHP nâng cao thuộc bài giảng mã nguồn mở nhằm trình bày về Cookie, Session, Gửi mail, xử lý File, chuyển hướng website với .htaccess, bắt lỗi chương trình, hướng đối tượng trong PHP.

Trang 3

a- Cookie là mẫu tin nhỏ, có cấu trúc, dạng text lưu ở máy client khi truy cập một website (nếu kịch bản trong trang đó có chức năng thiết lập cookie).Cookie được lưu ở thư mục :

C:\Documents and Settings\Administrator\Cookies

Ví dụ đây là một mẫu cookie khi viếng trang www.ibm.com

UnicaNIODID 4yZ3oOSlqrO-WrSL3kV ibm.com/

1600 1465922944 30475811 543399952 30113713

*

(tên tệp ndt@ibm[1]) ndt là PC name của client

Trang 4

Cookie (tt)

b- Thiết lập cookie

Cú pháp: setcookie(name, value, expire[, path, domain]);

Trong PHP, câu lệnh setcookie phải đặt trước thẻ <html>

Ví dụ :

Trang CreateCookie.php

<?php

$expire=time()+60*60*24*30; // hết hạn sau 30 ngày

setcookie(“username", “NguyenMinhThanh", $expire);

echo "Cookie has been created!";

?>

Hàm time() trả về số giây đã trôi qua bắt đầu từ 01-Jan-1970

Một dạng thời gian dùng trong hệ điều hành Unix

Trang 5

$_COOKIE[] là một biến mảng toàn cục

Hàm isset() kiểm tra một biến đã được khai báo, khởi gán chưa

Trang 8

session_start(); $biến = $_SESSION [‘tên’ ];

Xóa giá trị đã thiết lập : unset($_SESSION[ ‘tên’ ]);

Hủy bỏ toàn bộ biến $_SESSION[] : session_destroy();

Session có rất nhiều ứng dụng, ví dụ như lưu trữ thông tin về giỏ hàng trong E-commerce

Trang 9

Dựa trên các kỹ thuật:

-Chỗ nào cần đưa các giá trị php chỉ cần <php echo $biến ?>

- Biến toàn cục lưu tên trang hiện thời : $_SERVER[‘PHP_SELF’]

- Câu lệnh if else endif của PHP để điều khiển luồng HTML

Trang 10

$user=$_REQUEST["ht"]; $pass=$_REQUEST["mk"]; // thay cho $_POST[]

?>

<?php if($user==""): ?> <!- - có thể dùng if(!isset($_REQUEST[‘ht’])) - ->

You are'nt login!

<form method = post action = <?php echo $_SERVER["PHP_SELF"]?> >

User Name: <input type= text name=ht>

Password:<input type= password name=mk>

<input type=submit value="Sign in“>

Trang 11

Cú pháp: mail (to,subject,message,headers,parameters)

Ý nghĩa các tham số:

- to, subject, message : như ý nghĩa các text box khi soạn mail

- headers :tùy chọn, có thể sử dụng Bcc, Cc

- parameter: tùy chọn, các thông số về trình soạn, gởi mail

Trong phần message: sử dụng ký hiệu \n để xuống dòng.

Trang 12

$subject = "Test mail";

$message = "Hello! This is a simple email message.";

$from = “ndt473@yahoo.com";

$headers = "From: $from";

@ mail($to,$subject,$message,$headers); // không cho warning!

echo "Mail Sent.";

?>

Lưu ý:

-người gởi phải có một đia chỉ mail Theo dõi các kỹ thuật chống spam của mỗi trình gởi, nhận mail của người nhận!

-Phối hợp với form để soạn thảo một trình gởi mail

-Có thể lập trình để gởi mail đến danh sách các địa chỉ đã lưu trong CSDL

Trang 13

1 Mở file

$file=fopen("welcome.txt","r") or exit("Unable to open file!");

Trang 14

3- Kiểm tra EOF

if (feof($file)) echo "End of file";

Trang 17

echo "Upload: " $_FILES["file"]["name"] "<br />";

echo "Type: " $_FILES["file"]["type"] "<br />";

echo "Size: " ($_FILES["file"]["size"] / 1024) " Kb<br />";

echo "Temp file: " $_FILES["file"]["tmp_name"] "<br />";

if (file_exists("upload/" $_FILES["file"]["name"])) {echo $_FILES["file"]["name"] " already exists " }else {

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/"

$_FILES["file"]["name"]);

echo "Stored in: " "upload/" $_FILES["file"]["name"];

}}

?>

Trang 19

Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và htaccess.

Do vậy trước khi làm việc với htaccess, bạn nên backup cẩn thận dữ

liệu của mình, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.

Trang 20

[R] : chỉ định server đổi hướng request sang một trang khác trong

trường hợp trình duyệt gởi yêu cầu duyệt một trang được sửa chữa

đường dẫn (rewrite) trước đó

Trang 21

• Những kí tự đặc biệt

[NC] : Chỉ định server so khớp nhưng kí tự không phân biệt hoa thường

Ví dụ :

RewriteCond %{HTTP_REFERER} !^http://domain.com/.*$ [NC]

[PT]: có nghĩa là dùng kí tự để buộc "rewrite engine" ấn định bảng giá trị của uri trở thành giá trị của tên files

[OR] : các biểu thức được nối tiếp nhau bằng toán tử OR, trong đó biểu thức nào đúng, sẽ là quy tắc để lệnh Rewrite áp dụng

Ví dụ:

RewriteBase /

RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]

RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]

RewriteCond %{HTTP_USER_AGENT} ^attach [OR]

RewriteRule ^.* - [F,L]

[NE] : Chỉ định server xử lí các gói tin trả về mà không dùng kí tự thoát

Trang 22

[T=MIME-type] : Khai báo định dạng files của server

[] : chỉ định các kí tự đặt đặt trong [] sẽ được match Cụ thể [xyx] thì các request có mang theo các kí tự x, y hoặc z sẽ được match.

+ : chỉ định nội dung đừng trước dấu + phải xuất hiện ít nhất 1 lần [^] : Ngược lại với [], các kí tự được đặt theo dạng [xyz^] sẽ không được match.

[a-z] : Dấu ‘-‘ đặt giữa 2 kí tự bên trong cặp dấu [] sẽ match tất cả các kí tự nằm trong khoảng từ kí tự đầu đến kí tự cuối.

Trang 23

a{n} : chỉ định chính xác n kí tự a được match Ví dụ a{3} thì 3 kí tự a

? : chuỗi có hoặc không

! : phủ định VD: “!string” sẽ match tất cả các kí tự, ngoại trừ string

- : Loại đi một chức năng, hoặc một rule đang thực thi nào đó.

* : Tất cả đều được

| : Hoặc

\ : Kí tự thoát

Trang 24

Cơ bản về htaccess

• Những kí tự đặc biệt

-d : Kiểm tra thư mục có tồn tại hay không?

-f : Kiểm tra file có tồn tại hay không

-s : Kiểm tra giá trị của file có khác 0 hay không?

Mã chuyển hướng trang báo lỗi

- 401 - Authorization Required : Lỗi chưa được xác thực user và password

- 400 - Bad request : Lỗi truy cập không hợp lệ, do server không chấp nhận request, hoặc request thiếu một số yêu cầu nào đó.

- 403 - Forbidden : Lỗi truy cập vào trang bị cấm

- 500 - Internal Server Error : Lỗi do server

- 404 - Wrong page : Lỗi truy cập vào trang không tồn tại

- 301 - Moved Permanently: 302 - Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.

Trang 25

1 Ngăn chặn hotlink

Nhiều người copy ảnh từ server của bạn và đưa lên trang web của họ Thêm vào htaccess đoạn mã dưới đây sẽ giúp bạn ngăn chặn ảnh hiển thị trên website khác:

Trang 26

Các ví dụ trong htaccess

2 301 Redirect

Nếu ta chuyển domain, hoặc chỉ muốn chuyển một trang cũ về một trang mới

và không muốn lo lắng về các kết quả search từ google, sử dụng đoạn mã sau

Redirect 301 /d/file.html http://www.domain.com/r/file.html

3 Viết lại tên miền cũ sang tên mới

Sử dụng đoạn mã dưới đây để chuyển tất cả các link từ tên miền cũ sang tên miền mới:

#Chuyển hướng từ tên miền cũ sang tên mới

RewriteEngine On

RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

Trang 27

Nếu không muốn dùng các trang báo lỗi có sẵn của host, ta có thể tạo các trang báo lỗi riêng và cấu hình vào file htaccess như sau:

Trang 28

Các ví dụ trong htaccess

6 Bảo vệ file

Đoạn mã dưới đây sẽ từ chối

khi người dùng truy cập vào

bất kỳ file nào và gửi về lỗi

7 Đặt mã cho thư mục và file

Đặt mã & quyền truy cập vào thư mục/file như sau:

# Đặt mã cho thư mụcresides

AuthType basicAuthName "Thư mục này đã được bảo vệ"AuthUserFile /home/path/.htpasswd

AuthGroupFile /dev/nullRequire valid-user

# Đặt mã cho file

<files secure.php="">

AuthType BasicAuthName "Prompt"

AuthUserFile /home/path/.htpasswdRequire valid-user

Trang 29

RewriteRule ^category/(.+)$

http://www.domain.com/$1 [R=301,L]

11 Bỏ phần đuôi file ở URL

Không muốn hiện php ở url, hãy thêm

đoạn code sau:

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]

Trang 30

Các ví dụ trong htaccess

12 Thêm / vào cuối URL

Một vài bộ máy tìm kiếm (như Yahoo)tự động bỏ dấu / ở cuối url Website cũng

có thể được truy cập có hoặc không có dấu / ở sau cùng url Điều này không tốt với các bộ máy tìm kiếm (sẽ bị coi là duplicated content) Thêm đoạn mã dưới đây vào htaccess để giải quyết vấn đề đó:

#Thêm / vào cuối URL

Trang 31

Để ngăn chặn truy cập vào tên file trong thư mục nào đó (ví dụ thư mục plugins của wordpress), thêm đoạn mã sau vào file htacess:

Options All -Indexes

Nếu muốn cho phép browse thư mục bạn chỉ cần đổi lại là:

Options All +Indexes

Trang 32

Bắt lỗi chương trình

• Khi có vấn đề trong quá trình thực thi, PHP luôn cố gắng đưa ra các thông báo lỗi hữu ích để người dùng (lập trình viên) xác định được vấn đề.

Trang 33

• Các cấu hình về thông báo lỗi nằm trong file php.ini

• Cấu hình trong php.ini

error_reporting = E_ALL & ~E_NOTICE

Trang 34

echo “This is impossible<br>”;

exit();

}

If ($height_of_door > $height_of_house) {

trigger_error(“Impossible condition”,E_USER_ERROR); }

Trang 35

“Lập trình hướng đối tượng là 1 phương pháp viết mã cho phép các lập trình

viên nhóm các action tượng tự nhau vào các class” Điều này giúp mã lệnh giữ vững được nguyên lý DRY “don’t repeat yourself” (không lặp lại chính nó) và dễ dàng để bảo trì

Một lợi ích to lớn của nguyên lý lập trình DRY là: nếu một phần thông tin nào đó được thay đổi trong chương trình, thì thông thường chỉ cần có duy nhất 1 thay đổi để cập nhật lại mã lệnh Một trong những ác mộng lớn nhất đối với các lập trình viên là bảo trì mã lệnh, nơi dữ liệu được khai báo đi khai báo lại nhiều lần,

họ phải tìm kiếm, làm việc trên các dữ liệu và chức năng trùng lặp

Trang 36

Hướng đối tượng trong PHP

Hiểu Về Đối Tượng (Objects) Và Lớp (Class)

Nhiều lập trình viên có kinh nghiệm cho rằng hai khái niệm object và class có

thể thay thế cho nhau Tuy vậy, đây không phải là vấn đề đáng quan tâm,

mặc dù sự khác nhau giữa object và class có thể sẽ rất phức tạp khiến bạn

phải bù đầu để tìm hiểu khi mới tiếp xúc với chúng

Trang 37

Hiểu Về Đối Tượng (Objects) Và Lớp (Class)

Một object sau đó, cũng giống như một ngôi nhà thực tế được xây dựng dựa trên bản thiết kế này Dữ liệu trong object ở đây có thể được xem như là gỗ, dây điện,

và bê tông để tạo nên ngôi nhà hoàn chỉnh: mà không hề có chi tiết cách tạo ra chúng trong bản thiết kế Tuy nhiên, khi kết hợp tất cả lại với nhau, nó sẽ trở

thành một ngôi nhà hoàn chỉnh đến từng chi tiết

Các Class xử lý cấu trúc dữ liệu và các action, đồng thời sử dụng các thông tin

đó để xây dựng các object Có thể có nhiều hơn một object được xây dựng từ

cùng một class tại cùng một thời điểm, mỗi object này đều là 1 cá thể độc lập và

không phụ thuộc lẫn nhau Trở lại vấn đề xây dựng, điều này cũng giống như một quần thể các lô nhà có thể được xây dựng trên cùng một bản thiết kế: 150 ngôi nhà khác nhau đều có hình dạng giống nhau, nhưng có các hộ gia đình và nội thất bên trong đều khác nhau

Trang 38

Hướng đối tượng trong PHP

a- Đặc điểm OOP trong PHP 5.0 : không cho phép đa kế thừa

b- Khai báo class

Class tên_class{

// khai báo thuộc tính, bản chất là biến dùng trong class

// khai báo các phương thức, bản chất là các hàm Riêng hàm dựng // phải cùng tên với tên của class

// sử dụng từ khóa private hay public và protected để xác định chế // độ truy xuất

Trang 39

echo "Su dung ham constractor<br>";

$hung= new hoso (“Nguyễn Minh Thành",“12/3/1985");

echo "Họ tên: " $hung->ho_ten “, Ngày sinh: " $hung->ngay_sinh ;

?>

Ví dụ đơn giản

Trang 40

Phương Thức Magic Trong OOP

• Để giúp cho việc sử dụng các object trở nên thuận tiện hơn,

PHP đã cung cấp một số phương thức magic, chúng thường

được gọi khi có những action nhất định thường xuyên xảy ra trong các object Điều này cho phép lập trình viên thực thi một

số tác vụ hữu ích dễ dàng.

(hàm hủy)

Khi một object được khởi tạo, nó thường kèm theo nhu cầu

thiết lập một vài thứ ngoài lề Để xử lý điều này, PHP cung cấp phương thức magic construct(), phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo.

• Để gọi một hàm khi object bị hủy, chúng ta có sẵn phương

thức magic destruct() Thông thường nó được sử dụng vào mục đích dọn dẹp một cái gì đó (ví dụ: đóng một kết nối cơ sở

dữ liệu).

Trang 42

Phương Thức Magic Trong OOP

Trang 43

Convert qua một Chuỗi

Nếu muốn echo MyClass ra dưới dạng chuỗi, ta sẽ gặp lỗi Để tránh được lỗi này, cần sử dụng một phương thức magic khác được gọi là toString().

Trang 44

Sự kế thừa trong hướng đối tượng

• Một Class có thể kế thừa các phương thức và thuộc tính của class khác, bằng cách sử dụng từ khóa extends

Trang 45

Tại một class con, để thay đổi giá trị, tính năng của một thuộc tính hoặc phương thức đã có sẵn ở class cha, chỉ cần ghi đè (nạp chồng) lên nó bằng cách khởi tạo lại chính nó trong class con

Trang 46

- Chế độ protected : Chế độ này sẽ được dùng để giới hạn truy cập tới các lớp được thừa kế và bản thân lớp định nghĩa thành viên đó.

Với PHP5 , tất cả các thành viên của một lớp đều phải được khai báo tính rõ ràng với các từ khoá tương ứng là public, protected và private.

Trang 47

public $public = 'Public 1'; // truy xuất mọi nơi  trang

private $private = 'Private 1'; // chỉ t.x được bên trong lớp

protected $protected = 'Protected 1'; // không cho kế thừa,private

public function printHello(){ // được truy xuất mọi thuộc

echo $this->public."<br>"; // bên trong lớp

echo $this->protected."<br>";

echo $this->private."<br>";

}

}

class MyClass2 extends MyClass{ // thừa kế từ lớp MyClass

protected $protected = 'Protected2';

function printHello(){ // chồng hàm

echo $this->public."<br>"; // thừa kế từ MyClass

echo $this->protected."<br>"; // lấy thuộc tính riêng

echo $this->private."<br>"; // không thừa kế từ MyClass

}

}

Xem tiếp trang sau về sử dụng các lớp MyClass và MyClass2

Trang 48

$obj = new MyClass();

echo $obj->public; /

echo $obj->protected; // lỗi: $protected đã bị đặt ở chế độ bảo vệ

echo $obj->private; // lỗi: $private đã bị đặt ở chế độ riêng tư

$obj->printHello();

// Hoạt động bình thường, do các thuộc tính được triệu gọi bên trong một phương thức nằm trong lớp

$obj2 = new MyClass2();

echo $obj->public; // Chạy tốt

echo $obj2->private; // Chưa được định nghĩa

echo $obj2->protected; // Gây lỗi

$obj2->printHello(); // Hiển thị Public, Protected2, not Private

?>

Ngày đăng: 11/05/2021, 04:40

🧩 Sản phẩm bạn có thể quan tâm