PHP part3. Regex - File - UploadFile - Error - Sesion & Cookie - Mail trong PHP

ở bài trước mình đã giới thiệu với các bạn về định nghĩa hàm, thao tác với Array - String - Number - Time trong PHP, ở bài này mình xin giới thiệu tiếp với các bạn về các vấn đề sau:

  • Regex
  • File
  • File Upload
  • Error
  • Session & Cookie
  • Mail trong PHP

Chúng ta sẽ lần lượt đi tìm hiểu các vấn đề trên.

PHP Regex:

Mục đích sử dụng PHP Regex là để kiểm tra giá trị đầu vào của một số dữ liệu: ví dụ: regex của email:

^[a-z][a-z0-9_\.]{4,31}@[a-z0-9]{2,}(\.[a-z0-9]{2,4}){1,2}$

để kiểm tra một email được nhập từ form xem email đó có hợp lệ hay không, có đúng format hay không thì chúng ta nên sử dụng regex. sau đây chúng ta sẽ đi phân tích chi tiết từng ký hiệu trong regex cũng như ý nghĩa của nó.

Ký hiệu Ý nghĩa
^ Tìm kiếm giá trị từ đầu chuỗi nguồn
$ Tìm kiếm giá trị từ cuối chuỗi nguồn
\ Tìm kiếm các giá trị đặt biệt trong chuỗi
. Đại diện cho một ký tự bất ký
[] Tìm tập hợp các ký tự
- Lấy các ký tự trong một khoảng nào đó (thường dùng với ký hiệu [])
^ Nếu một ký tự ^ đứng trước một ký tự hay tập hợp có nghĩa là phủ định của ký hiệu hay tập hợp đó
(A B C) Lựa chọn các giá trị A hoặc B hoặc C
* 0 hoặc nhiều lần xuất hiện-
+ 1 hoặc nhiều lần xuất hiện
? 0 hoặc 1 lần xuất hiện
{n,m} Số lần xuất hiện của ký tự từ n đến m lần
* ? 0 lần xuất hiện
+? 1 lần xuất hiện
?? 0 lần xuất hiện
\w Tương đương [A-z0-9 _ ]
\W Tương đương [^A-z0-9 _ ]
\s Tập hợp những ký tự khoảng trắng
\S Tập hợp những ký tự không là ký tự khoảng trắng
\d [0-9] Tập hợp những ký tự từ 0 đến 9
\D [^0-9] Tập hợp những ký tự không thuộc từ 0 đến 9
\A ^ Tìm kiếm giá trị từ đầu chuỗi nguồn
\Z $ Tìm kiếm giá trị từ cuối chuỗi nguồn
\b Tìm ở vị trí biên của một từ
\B Tìm ở vị trí không phải biên của một từ

Thao tác với File trong PHP:

** để kiểm tra sự tồn tại của tập tin, thư mục. Ta sử dụng hàm file_exist($fileName) trong đó:**

  • $filename: tên (đường dẫn) tập tin, thư mục cần kiểm tra
  • Kết quả trả về true nếu Tồn tạ
  • Kết quả trả về false nếu Không tồn tại

để xem một số thông tin cơ bản của tập tin, thư mục

  • filetype($fileName) trả về kiểu của $filename (tập tin hoặc thư mục
  • filesize($fileName) trả về dung lượng của $filename (đơn vị bytes)
  • is_readable($fileName) kiểm tra $fileName có được quyền đọc hay không ?
  • is_writeable($fileName) kiểm tra $fileName có được quyền ghi hay không ?
  • is_executable($fileName) kiểm tra $fileName có được quyền thực thi hay không ?

một số hàm lấy thông tin từ đường dẫn:

  • basename($path) trả về kết quả là tên của tập tin từ đường dẫn $path
  • dirname($path) trả về tên thư mục tại đường dẫn $path
  • pathinfo ($path, $options) trả về một mảng các thông tin từ đường dẫn $path

Thống kê số dòng, số từ và số ký tự trong file

  • file ($fileName) đọc tập tin $fileName thành một mảng, mỗi dòng trong tập tin $fileName tương ứng với một phần tử của mảng
  • file_get_contents ($fileName) đọc tập tin $fileName thành một chuỗi

Ghi nội dung vào tập tin với file_put_contents

  • Sử dụng hàm file_put_contents ($fileName, $data, $mod) để ghi nội dung $data vào tập tin $fileName
  • Quá trình thực thi của hàm file_put_contents(): Tạo ra tập tin nếu tập tin đó chưa tồn tại còn không thì Mở tập tin sau đó Ghi nội dung và Đóng tập tin
  • nếu $mod = FILE_APPEND nội dung cũ ở tập tin được giữ, nội dung mới được ghi vào cuối tập tin
  • Nếu ghi thành công, trả về tổng số ký tự đã ghi ngược lại trả về FALSE

Đổi tên tập tin, thư mục

  • Sử dụng hàm rename ($oldName, $newName) để đổi tên tập tin, thư mục từ giá trị $oldName thành giá trị $newName (lưu ý thay đổi cả phần đường dẫn)
  • Hàm trả về kết quả TRUE nếu rename thành công, trả về kết quả FALSE nếu rename không thành công

Sao chép tập tin

  • Sử dụng hàm copy ($sourceFile, $destinationFile) để copy nội dung từ tập tin $sourceFile sang tập tin $destinationFile
  • Hàm trả về kết quả TRUE nếu copy thành công, trả về kết quả FALSE nếu copy không thành công

**Khái quát về vấn đề phân quyền tập tin, thư mục **

  • Xét mối quan hệ giữa người dùng và một tập tin, thư mục. Chúng ta có 3 nhóm sau đây:
  • Owner/User: Người sở hữu, chủ tài khoản.
  • Group: Các tài khoản cùng hoạt động trong một nhóm.
  • Other/Guest: Ngoài 2 đối tượng trên.
  • Xét về quyền thao tác giữa người dùng và một tập tin. Chúng ta có 3 loại quyền sau:
  • Read: có thể đọc nội dung trong tập tin
  • Write: có thể thay đổi nội dung của tập tin
  • Execute: có thể mở tập tin (khởi chạy chương trình nếu là một tập tin ứng dụng)
  • Tạo – Xóa – Cấp quyền cho thư mục
  • Sử dụng hàm mkdir ($path, $mode) để tạo ra thư mục ở đường dẫn $path, với quyền truy cập vào thư mục là $mode
  • Sử dụng hàm rmdir ($path) để xóa thư mục ở đường dẫn $path
  • Sử dụng hàm fileperms ($dirName) để xem quyền truy cập đối với thư mục $dirName
  • Sử dụng hàm chmod ($dirName, $mod) để cấp quyền truy cập cho thư mục $dirName
  • Sử dụng hàm file_put_contents ($path, null) để tạo ra tập tin ở đường dẫn $path
  • Sử dụng hàm unlink ($path) để xóa tập tin ở đường dẫn $path
  • Sử dụng hàm fileperms ($fileName) để xem quyền truy cập đối với tập tin $fileName
  • Sử dụng hàm chmod ($fileName, $mod) để cấp quyền truy cập cho tập tin $fileName

Liệt kê danh sách tập tin và thư mục

  • Sử dụng hàm glob ($pattern) để lấy danh sách các tập tin và thư mục với tên thỏa $pattern
  • Sử dụng tham số thứ hai GLOB_ONLYDIR để kết quả trả về chỉ bao gồm các thư mục.

Tìm hiểu hàm parse_ini_file

  • Sử dụng hàm parse_ini_file ($fileName) để đọc nội dung $fileName thành một mảng.
  • Lưu ý nếu muốn đọc luôn các phần section cần truyền giá trị TRUE vào tham số thứ hai

Một số định nghĩa về hệ thống cây thư mục

  • Root-directory: thư mục cao nhất trong cây thư mục và trên nó không còn có một thư mục nào khác. Root-directory được đánh dấu với ký hiệu /
  • Working-directory (current directory): thư mục mà người sử dụng đang làm việc
  • Parent-directory: thư mục cha - thư mục nằm ngay phía trên một thư mục khác trong cây thư mục
  • Path (đường dẫn): mỗi tệp tin hay thư mục trong hệ thống linux được chỉ định bởi một đường dẫn (để truy cập vào tập tin hay thư mục đó)

** Phân biệt đường dẫn tuyệt đối – Đường dẫn tương đối**

  • Đường dẫn tuyệt đối:

    • Là những đường dẫn được tính từ root (/), đi qua các thư mục khác cho đến tập tin hoặc thư mục đích
    • Khi chúng ta đang ở article.php, đường dẫn tuyệt đối đến các tập tin
    • style.css sẽ là /style/style.css
    • vi.php sẽ là /lib/language/vi.phpstyle.css
    • Thường được dùng với các hàm include, require để nhúng các tập tin .php vào một tập tin php nào đó hoặc dùng để khai báo thư mục chứa hình ảnh trên host
  • Đường dẫn tương đối:

    • Là những đường dẫn có điểm xuất phát là thư mục hiện tại (current diractory).
    • Khi chúng ta đang ở article.php, đường dẫn tương đối đến các tập tin
    • style.css sẽ là ../css/style.css
    • vi.php sẽ là /lib/language/vi.php
    • Thường được sử dụng để load các tập tin javascript, css và hình ảnh lên và hiển thị trong trang web

một số hàm thao tác với thư mục:

  • getcwd() trả về thư mục hiện tại
  • realpath() trả về đường dẫn tuyệt đối của đường dẫn $path
  • chdir() thay đổi thư mục hiện tại
  • dir() mở một thư mục lên và thao tác với thư mục đó (3 thao tác read, rewind close )
  • opendir() mở một thư mục lên và thao tác với thư mục đó
  • closedir() đóng thư mục được mở bởi hàm opendir()
  • scandir() lấy danh sách các tập tin và thư mục của đường dẫn $path

UploadFile trong PHP:

Cơ chế upload file trong PHP: Giả sử tập tin upload có tên là picture.jpg, quá trình upload gồm 2 bước sau: Bước 01: Copy picture.jpg vào bộ nhớ tạm và đổi tên thành * .tmp Bước 02:

  • Di chuyển file tạm lên server
  • Đổi tên file tạm thành picture.jpg

ví dụ form uploadFile:

<form action="#" method="post" name="main-form" id="main-form" enctype= "multipart/form-data">
<input type="file" name="file-upload" />
<input type="submit" name="submit-button" />
</form>

Tìm hiểu các tham số của file upload

  • $_FILE['file-upload']['name']: Tên file (file-upload) upload lên server
  • $_FILE['file-upload']['size']: Kích thước của file
  • $_FILE['file-upload']['type']: Kiểu file
  • $_FILE['file-upload']['tmp_name']: Tên thư mục tạm trên server để chứa file
  • $_FILE['file-upload']['error']: Thông báo lỗi khi upload file

Sử dụng hàm move_upload_file ($filename , $destination) để upload tập tin $fileName vào vị trí $destination

Error

Các lỗi cú pháp thường gặp trong lập trình PHP

  • Đặt tên biến hoặc tên hàm không theo quy tắc, truyền thiếu tham số vào hàm.
  • Lỗi chính tả: người viết mã có thể viết hay gọi sai tên hàm, tên biến.
  • Vượt quá khả năng tính toán: Khi người lập trình yêu cầu chức năng quá khả năng của server sẽ gây ra các lỗi mà đôi khi không xác định được
  • Các lỗi cú pháp đa phần đều được nhắc nhở bởi trình soạn thảo mã nguồn (editor)
  • Câu lệnh die($variable) in ra nội dung của biến $varible và kết thúc chương trình ngay tại vị trí gọi lệnh die()
  • Câu lệnh die() được sử dụng khá thường xuyên trong việc debug
  • Không hiển thị các phần thông báo lỗi cho người dùng, gây ảnh hưởng không tốt đối với người dùng và website, ẩn lỗi bằng cách nào ?
  • Ẩn các lỗi phát sinh khi website được vận hành, ghi các lỗi vào một file log nào đó để có thể xem lại và khắc phục các lỗi này .
ini_set("display_errors", "off");
ini_set("log_errors", "on");
ini_set("error_log", "php.error.log");
  • Thiết lập loại thông báo lỗi muốn hiển thị error_reporting() hoặc ini_set('error_reporting', VALUE)
  • Ẩn tất cả các lỗi: error_reporting(0);
  • Hiển thị tất cả các lỗi: error_reporting(E_ALL);
  • Hiển thị các phần warning: error_reporting(E_WARNING);
  • Hiển thị các phần notice: error_reporting(E_NOTICE);
  • Giá trị hiển thị được thiết lập mặc định: error_reporting(E_ALL ^ E_NOTICE);

Creating a Custom Error Handler Dựa vào error_function(error_level, error_message, error_file, error_line, error_context) để xây dựng lại nội dung thông báo muốn hiển thị

  • error_level: error report level (E_NOTICE, E_WARNING, E_ALL, …)
  • error_message: nội dung thông báo lỗi muốn hiển thị
  • error_file: tên file xảy ra lỗi
  • error_line: xảy ra lỗi ở dòng nào

Session & Cookie

PHP Session:

  • PHP session cho phép lưu trữ dữ liệu của người dùng trên server để sử dụng ở các lần sau ( như username, thông tin đặt hàng ...).

  • Các thông tin session này chỉ là tạm thời và thường bị xoá đi ngay khi người dùng rời khỏi trang web đã dùng session.

  • Mỗi session sẽ được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).

  • Session hoạt động bằng cách tạo 1 chuỗi unique (UID) cho từng vistore và chứa thông tin dựa trên ID đó.

  • Mỗi trang PHP là một chương trình đang chạy trên máy chủ. Khi chương trình bắt đầu chạy, nó yêu cầu hệ điều hành của máy chủ cấp cho nó một số bộ nhớ để lưu trữ các biến.

  • Khi trang được tải xong, hệ điều hành của máy chủ lấy bộ nhớ rở lại, bộ nhớ của trang sẽ bị xóa, tất cả thông tin trên trang đều bị xóa

  • Dữ liệu được lưu vào bộ nhớ ở mỗi trang là độc lập với nhau (trang A không truy cập được bộ nhớ của các biến được tạo bởi trang B)

  • session_start() khởi tạo session, lưu ý hàm này phải được đặt trước thẻ <html>

  • Cập nhật thông tin session thông qua biến $_SESSION

  • Xóa session

    • unset()
    • session_destroy()

Session có thể lưu trữ các giá trị gì ?

  • Lưu biến vào session
  • Lưu mảng vào session
  • Lưu hàm (function) vào session
  • Lưu file (nội dung tập tin) vào session
  • Lưu hình ảnh vào session

session_encode & session_decode

  • session_encode() chuyển đổi các nội dung được lưu trong SESSION thành một chuỗi đặc biệt
  • session_decode() phân tích chuỗi đặc biệt được chuyển đổi bởi hàm session_encode() và lưu vào SESSION

Tìm hiểu COOKIE

  • PHP session và PHP cookie xét cho cùng đều được sử dụng để lưu trữ dữ liệu của người dùng.
  • Đối với Session các dữ liệu này được lưu tại server, ngược lại đối với cookie các dữ liệu này được lưu trữ ngay tại trình duyệt web của người sử dụng
  • Mỗi browser quản lý và lưu trữ cookie theo cách riêng của nó, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.

Thao tác với cookie

  • Tạo cookie setcookie($name, $value , $time)
  • Truy cập cookie $_COOKIE
  • Hủy cookie
  • setcookie($name)
  • setcookie($name, $value, time()-3600)

So sánh cookie và session

  • Cookie và session đều được sử dụng để lưu trữ dữ liệu. Tuy nhiên session được lưu tại server, cookie được lưu ở client
  • Session bị xóa khi người dùng đóng trình duyệt, cookie bị xóa khi thời gian tồn tại của nó kết thúc
  • Session bảo mật hơn cookie, cookie được lưu ở client nên có thể được chỉnh sửa bởi client

PHP Mail

Tìm hiểu cách sử dụng hàm mail()

  • mail ($to, $subject, $message,$headers) thực hiện chức năng gửi mail, các tham số có ý nghĩa như sau
  • $to : địa chỉ người nhận email
  • $subject : tiêu đề của email
  • $message : nội dung email (có thể bổ sung các thẻ html)
  • $header : chèn thêm các header vào email. Các header này không nằm trong phần nội dung của email mà dùng để quản lý việc gởi email (ví dụ chèn thêm các trường CC, BCC khi gởi email).

Tóm tắt:

trên đây mình đã giới thiệu với các bạn sơ qua về Regex, File, File Upload, Error, Session & Cookie, Mail trong PHP. hy vọng nó sẽ giúp ích cho các bạn. ở bài sau mình sẽ đi tìm hiểu và làm việc với XML

  • Tìm hiểu cơ bản về XML
  • SimpleXML
  • DOMDocument và có thể sẽ tìm hiểu cả về lập trình hướng đối tượng trong PHP. hẹn các bạn ở bài tiếp theo!!

All Rights Reserved