Bài 27: Thu thập dữ liệu Người dùng bằng Biểu mẫu trong PHP

Trong bài hướng dẫn tự học Lập trình PHP này, mình sẽ giúp bạn tìm hiểu cách lấy, thu thập dữ liệu đầu vào của người dùng được gửi qua một biểu mẫu (form) bằng cách sử dụng các biến superglobal trong PHP như: $_GET, $_POST và $_REQUEST.

Trong bài hướng dẫn tự học Lập trình PHP này, mình sẽ giúp bạn tìm hiểu cách lấy, thu thập dữ liệu đầu vào của người dùng được gửi qua một biểu mẫu (form) bằng cách sử dụng các biến superglobal trong PHP như: $_GET, $_POST$_REQUEST.

Nhận lấy dữ liệu người dùng bằng biểu mẫu trong PHP
Nhận lấy dữ liệu người dùng bằng biểu mẫu trong PHP

Bước 1: Tạo biểu mẫu đơn giản với HTML

Trong bài hướng dẫn này, chúng tôi sẽ tạo một biểu mẫu liên hệ bằng HMTL đơn giản.

Biểu mẫu này cho phép người dùng nhập nhận xét và phản hồi của họ sau đó hiển thị nó cho trình duyệt bằng PHP.

Mở phần mềm soạn lập trình php yêu thích của bạn và tạo một tệp PHP mới. Bây giờ hãy nhập đoạn mã sau và lưu tệp này dưới dạng ‘contact-form.php‘ trong thư mục gốc của dự án.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Biểu mẫu trong PHP</title>
</head>
<body>
    <h2>Contact Us</h2>
    <p>Điền vào biểu mẫu và nhấn Gửi.</p>
    <form action="process-form.php" method="post">
        <p>
            <label for="inputName">Tên:<sup>*</sup></label>
            <input type="text" name="name" id="inputName">
        </p>
        <p>
            <label for="inputEmail">Email:<sup>*</sup></label>
            <input type="text" name="email" id="inputEmail">
        </p>
        <p>
            <label for="inputSubject">Tiêu đề:</label>
            <input type="text" name="subject" id="inputSubject">
        </p>
        <p>
            <label for="inputComment">Nội dung:<sup>*</sup></label>
            <textarea name="message" id="inputComment" rows="5" cols="30"></textarea>
        </p>
        <input type="submit" value="Gửi">
        <input type="reset" value="Làm lại">
    </form>
</body>
</html>

Giải thích đoạn code biểu mẫu HTML trên

Lưu ý rằng có hai thuộc tính trong thẻ mở <form>:

  • Thuộc tính action: Tham chiếu tệp PHP ‘process-form.php‘ nhận dữ liệu được nhập vào biểu mẫu khi người dùng gửi nó. Nôm na là thuộc tính action chỉ định giai đoạn sau khi thực hiện Gửi dữ liệu thành công.
  • Thuộc tính method: Yêu cầu trình duyệt gửi dữ liệu biểu mẫu thông qua phương thức POST.

Phần còn lại của các thành phần bên trong biểu mẫu là các thành phần cơ bản để nhận thông tin người dùng nhập vào.

Bước 2: Lấy dữ liệu người dùng nhập vào biểu mẫu bằng PHP

Để truy cập giá trị của một trường cụ thể trong biểu mẫu, bạn có thể sử dụng các biến superglobal sau đây. Các biến này có sẵn trong tất cả các phạm vi trong tập lệnh.

  • $_GET: Chứa danh sách tất cả các tên và giá trị trường được gửi bởi một biểu mẫu bằng phương thức get (dữ liệu sẽ hiển thị trong URL).
  • $_POST: Chứa danh sách tất cả các tên và giá trị trường được gửi bởi một biểu mẫu bằng phương thức đăng (dữ liệu sẽ không hiển thị trong URL).
  • $_REQUEST: Chứa các giá trị của cả hai biến $_GET$_POST cũng như các giá trị của biến superglobal $_COOKIE.

Khi người dùng gửi biểu mẫu liên hệ ở trên thông qua việc nhấp vào nút submit, dữ liệu biểu mẫu được gửi đến tệp ‘process-form.php‘ trên máy chủ để xử lý.

Nó chỉ đơn giản là nắm bắt thông tin được gửi bởi người dùng và hiển thị nó cho trình duyệt.

Code PHP của tệp ‘process-form.php’ sẽ được viết như sau:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact Form</title>
</head>
<body>
    <h1>Cám ơn bạn!</h1>
    <p>Đây là thông tin bạn đã gửi:</p>
    <ol>
        <li><em>Tên:</em> <?php echo $_POST["name"]?></li>
        <li><em>Email:</em> <?php echo $_POST["email"]?></li>
        <li><em>Tiêu đề:</em> <?php echo $_POST["subject"]?></li>
        <li><em>Nội dung:</em> <?php echo $_POST["message"]?></li>
    </ol>
</body>
</html>

Đoạn code PHP ở trên khá đơn giản. Vì dữ liệu biểu mẫu được gửi qua phương thức POST, bạn có thể truy xuất giá trị của trường biểu mẫu cụ thể bằng cách chuyển tên của nó đến mảng superglobal $_POST và hiển thị từng giá trị trường bằng câu lệnh echo().

Cú pháp truy cập dữ liệu trong mảng superglobal:

$_POST["name"]

Trong thực tế, khi lấy, thu thập dữ liệu người dùng bằng biểu mẫu thì nội dung người dùng gửi cần phải được xử lý trước khi chuyển lên server. (Tránh trường hợp lợi dụng gửi mã độc lên server)

Luc này bạn phải thực hiện một số bước xác thực dữ liệu để đảm bảo dữ liệu người dùng sạch và đúng chuẩn cho phép.

Trong bài học tiếp theo, mình sẽ hướng dẫn bạn cách làm sạch và xác thực dữ liệu biểu mẫu liên hệ và gửi qua email bằng PHP.

Bài 26: Hướng dẫn gửi Email trong PHP

Trong bài hướng dẫn học lập trình PHP này, mình sẽ hướng dẫn bạn cách cách gửi email văn bản thông thường hoặc HTML đơn giản trong PHP bằng hàm mail().

Trong bài hướng dẫn học lập trình PHP này, mình sẽ hướng dẫn bạn cách cách gửi email văn bản thông thường hoặc HTML đơn giản trong PHP bằng hàm mail().

Hướng dẫn gửi Email trong PHP
Hướng dẫn gửi Email trong PHP

Giới thiệu về hàm mail() trong PHP

Gửi tin email là rất phổ biến trong khi lập trình website, ví dụ, gửi email chào mừng khi người dùng tạo tài khoản trên trang web của bạn, gửi bản tin cho người dùng đã đăng ký của bạn hoặc nhận phản hồi hoặc nhận xét của người dùng thông qua biểu mẫu liên hệ của trang web, v.v.

Bạn có thể sử dụng hàm mail() tích hợp sẵn trong PHP để tạo và gửi thư email đến một hoặc nhiều người nhận từ trang web PHP của bạn ở dạng văn bản thuần hoặc văn bản dạng HTML được định dạng.

Cú pháp cơ bản của chức năng này như sau:

mail(to, subject, message, headers, parameters) 

Giải thích về các tham số trong hàm mail()

Các tham số bắt buộc:

  • to: Địa chỉ email người nhận
  • subject: Tiêu đề, chủ đề của email sẽ được gửi. Tham số này không thể chứa bất kỳ ký tự tạo dòng mới nào (\n).
  • message: Đây là tin nhắn sẽ được gửi. Mỗi dòng nên được phân tách ra bằng (\n). Các dòng không được vượt quá 70 ký tự.

Các tham số tùy chọn (có thể có hoặc không):

  • headers: Tham số này thường được sử dụng để thêm các tiêu đề bổ sung, chẳng hạn như ‘From’, ‘Cc’, ‘Bcc’. Các tiêu đề bổ sung phải được phân tách bằng return và xuống dòng (\r\n).
  • parameters: Đây là các tham số bổ sung

Hướng dẫn gửi email văn bản đơn giản trong PHP

Cách đơn giản nhất để gửi email bằng PHP là gửi email văn bản thông thường (chỉ bao gồm text).

Trong ví dụ dưới đây, trước tiên chúng ta khai báo các biến – địa chỉ email, dòng tiêu đề và nội dung thư – sau đó chúng ta truyền các biến này đến hàm mail() để gửi email.

<?php

// Khai báo các biến
$to = 'hello@niithanoi.edu.vn';
$subject = 'Xin chào NIIT';
$message = 'Xin chào, Chúng ta làm bạn nhé'; 
$from = 'ironman@email.com';
 
// Gửi Email
if(mail($to, $subject, $message)){
    echo 'Chúc mừng. Email của bạn được gửi thành công.';
} else{
    echo 'Không thể gửi Email. Vui lòng thử lại.';
}
?>

Ok, bên trên đây bạn đã biết cách gửi email bằng văn bản thông thường. Rất đơn giản phải không?

Tiếp tục nhé…

Hướng dẫn gửi email văn bản định dạng HTML trong PHP

Vì khi bạn gửi email văn bản thông thường (chỉ có text) bằng PHP, tất cả nội dung sẽ rất đơn điệu, không thu hút người dùng.

Chúng ta sẽ cải thiện đầu ra đó và biến email thành email có định dạng HTML.

Để gửi email HTML, về quy trình gửi email sẽ giống nhau. Tuy nhiên, lần này chúng ta cần cung cấp thêm các headers cũng như một thông báo được định dạng HTML.

<?php

// Khai báo biến
$to = 'hello@niithanoi.edu.vn';
$subject = 'Xin chào NIIT';
$from = 'ironman@email.com';
 
// Để gửi thư HTML, Content-type header phải được thiết lập
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
 
// Tạo Email headers
$headers .= 'From: '.$from."\r\n".
    'Reply-To: '.$from."\r\n" .
    'X-Mailer: PHP/' . phpversion();
 
// Soạn tin nhắn email HTML đơn giản
$message = '<html><body>';
$message .= '<h1 style="color:#f40;">Xin chào!</h1>';
$message .= '<p style="color:#080;font-size:18px;">Chúng ta làm bạn nhé!</p>';
$message .= '</body></html>';
 
// Gửi email bằng hamgf mail()
if(mail($to, $subject, $message, $headers)){
    echo 'Chúc mừng. Email của bạn được gửi thành công.';
} else{
    echo 'Không thể gửi Email. Vui lòng thử lại.';
}
?>

Note 1: .= là toán tử nối và gán. Có nghĩa là từng dòng sẽ được nối vào với nhau và gán vào biến $message

Note 2: Hàm PHP mail() là một phần của PHP core nhưng bạn cần thiết lập mail server trên máy của mình để làm cho nó thực sự hoạt động.

Việc gửi email trong PHP cũng đơn giản phải không nào? :D. Dù là email văn bản thông thường hay Email HTML cũng đơn giản thôi.

Trong hai chương tiếp theo chúng ta sẽ học về (Xử lý biểu mẫu PHP và Xác thực mẫu PHP), bạn sẽ tìm hiểu cách triển khai biểu mẫu liên hệ tương tác trên trang web của mình để nhận nhận xét và phản hồi của người dùng thông qua email bằng tính năng gửi email PHP này.

Bài 25: Section trong PHP

Trong hướng dẫn này, bạn sẽ tìm hiểu cách lưu trữ dữ liệu nhất định trên máy chủ tạm thời bằng cách sử dụng Section trong PHP.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách lưu trữ dữ liệu nhất định tạm thời trên máy chủ bằng cách sử dụng Section trong PHP.

Section trong PHP
Section trong PHP

Section trong PHP là gì?

Section có nghĩa là Phiên.

Mặc dù bạn có thể lưu trữ dữ liệu bằng cookie nhưng nó có một số vấn đề bảo mật. Vì cookie được lưu trữ trên máy tính của người dùng, kẻ tấn công có thể dễ dàng sửa đổi nội dung cookie để chèn dữ liệu có hại trong website của bạn.

Ngoài ra, mỗi khi trình duyệt gửi một request URL đến máy chủ, tất cả dữ liệu cookie cho trang web sẽ tự động được gửi đến máy chủ trong request đó.

Điều này có nghĩa là nếu bạn đã lưu trữ 5 cookie trên hệ thống của người dùng, mỗi cookie có kích thước 4KB, trình duyệt cần tải thêm 20KB dữ liệu mỗi khi người dùng xem một trang, điều này có thể ảnh hưởng đến hiệu suất trang web của bạn.

Bạn có thể giải quyết cả hai vấn đề này bằng cách sử dụng Section trong PHP. Một phiên lưu trữ dữ liệu trên máy chủ thay vì máy tính của người dùng.

Trong mỗi phiên, mọi người dùng được xác định thông qua một số duy nhất được gọi là định danh phiên hoặc SID. Section ID duy nhất này được sử dụng để liên kết mỗi người dùng với thông tin của riêng họ trên máy chủ như email, bài đăng, v.v.

Note: ID phiên được tạo ngẫu nhiên bởi công cụ PHP gần như không thể đoán được. Hơn nữa, vì dữ liệu phiên được lưu trữ trên máy chủ, nên nó không cần phải gửi với request của user.

Các khởi tạo một phiên trong PHP

Trước khi bạn có thể lưu trữ bất kỳ thông tin nào trong các biến của phiên, trước tiên bạn phải bắt đầu khởi tạo một phiên.

Để bắt đầu một phiên mới, chỉ cần gọi hàm PHP session_start(). Nó sẽ tạo một phiên mới và tạo ID phiên duy nhất cho người dùng.

Đoạn mã PHP trong ví dụ dưới đây chỉ đơn giản là bắt đầu một phiên mới.:

<?php
  // Bắt đầu một phiên
  session_start();
?>

Hàm session_start() trước tiên kiểm tra xem liệu một phiên đã tồn tại chưa bằng cách tìm kiếm sự hiện diện của ID.

  • Nếu nó tìm thấy, tức là phiên đã bắt đầu, nó sẽ thiết lập các biến phiên
  • Nếu không, nó sẽ bắt đầu một phiên mới bằng cách tạo ID phiên mới.

Lưu ý: Bạn phải gọi hàm session_start() ở ngay đầu trang tức là trước bất kỳ đoạn mã nào, nó cũng giống như bạn làm trong khi thiết lập cookie với hàm setcookie().

Hướng dẫn lưu trữ và truy cập dữ liệu của Phiên

Bạn có thể lưu trữ tất cả dữ liệu phiên của mình dưới dạng các cặp key – value trong mảng supperglobal $ _SESSION[].

Dữ liệu được lưu trữ có thể được truy cập trong suốt thời gian tồn tại của phiên. Hãy xem xét đoạn mã sau, cách tạo ra một phiên mới và đăng ký hai biến phiên.

<?php
  // Starting session
  session_start();
 
  // Storing session data
  $_SESSION["firstname"] = "Php";
  $_SESSION["lastname"] = "DEV";
?>

Để truy cập dữ liệu phiên, chúng ta đã đặt trên ví dụ trước từ bất kỳ trang nào khác trên cùng một tên miền web – chỉ cần tạo lại phiên bằng cách gọi session_start() và sau đó chuyển key tương ứng vào mảng kết hợp $ _SESSION

<?php
  // Starting session
  session_start();
 
  // Accessing session data
  echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"];
?>

Đoạn mã PHP trong ví dụ trên tạo ra kết quả như sau:

Hi, Php DEV

Note: Để truy cập dữ liệu phiên trong cùng một trang, không cần phải tạo lại phiên vì nó đã được bắt đầu trên đầu trang.

Hướng dẫn các Phá hủy Phiên

Nếu bạn muốn xóa dữ liệu nhất định của phiên, chỉ cần unset key tương ứng của mảng kết hợp $_SESSION, như trong ví dụ sau:

<?php
  // Bắt đầu phiên
  session_start();
 
  // Xóa dữ liệu của phiên
  if(isset($_SESSION["lastname"])){
      unset($_SESSION["lastname"]);
  }
?>

Tuy nhiên, việc unset không phá hủy hoàn toàn phiên.

Muốn hủy hoàn toàn một phiên, chỉ cần gọi hàm session_destroy(). Hàm này không cần bất kỳ đối số nào và một lệnh gọi sẽ hủy tất cả dữ liệu phiên.

<?php
  // Bắt đầu phiên
  session_start();
 
  // Phá hủy phiên
  session_destroy();
?>

Lưu ý: Trước khi hủy phiên với hàm session_destroy(), trước tiên bạn cần tạo lại môi trường phiên nếu nó chưa có ở đó bằng cách sử dụng hàm session_start(). Phải có thứ gì đó thì mới hủy được chứ, đúng không nào?

Mỗi phiên PHP có một giá trị thời gian chờ – thời lượng, được tính bằng giây – xác định thời gian một phiên sẽ tồn tại trong trường hợp không có bất kỳ hoạt động nào của người dùng. Bạn có thể điều chỉnh thời lượng hết thời gian này bằng cách thay đổi giá trị của biến session.gc_maxlifetime trong tệp cấu hình PHP (php.ini).

Lời kết

Như vậy qua bài này bạn đã biết Section (phiên) là gì, cách tạo một phiên, các truy cập phiênxóa / phá hủy dữ liệu của phiên.

Chúng ta sẽ còn sử dụng phiên để cá nhân hóa trải nghiệm cho người dùng rất nhiều. Bạn sẽ quen dần qua các bài tập sau này.

Bài 24: PHP Cookies

Trong bài học này, mình sẽ hướng dẫn bạn sẽ tìm hiểu làm thế nào để sử dụng cookies trong PHP. Cách thiết lập cookie, truy cập cookie, xóa cookie trong PHP.

Trong bài học này, mình sẽ hướng dẫn bạn sẽ tìm hiểu làm thế nào để sử dụng cookies trong PHP lưu trữ một số thông tin trong trình duyệt của người dùng.

PHP Cookie, Hướng dẫn thiết lập Cookie trong PHP
PHP Cookie, Hướng dẫn thiết lập Cookie trong PHP

1. Cookie là gì?

Một cookie là một tập tin văn bản cho phép bạn lưu trữ một ít dữ liệu (gần 4KB) trên máy tính của người dùng.

Các lập trình viên thường dùng cookies để theo dõi các thông tin như tên người dùng … để có thể cá nhân hóa lượt truy cập của họ trong các lần tiếp theo.

Note: Mỗi lần trình duyệt gửi request đến máy chủ, tất cả dữ liệu trong cookie cũng sẽ tự động được gửi đến máy chủ.

2. Hướng dẫn thiết lập Cookie trong PHP

Hàm setcookie() được sử dụng để thiết lập cookie trong PHP.

Cần phải đảm bảo bạn đã gọi hàm setcookie() trước khi bất kỳ output nào được tạo nếu không cookie sẽ không được thiết lập.

Cú pháp để thiết lập Cookie như sau:

setcookie(namevalueexpirepathdomainsecure);

Các tham số của hàm setcookie() có các ý nghĩa sau:

  • name: Tên của cookie
  • value: Giá trị của cookie. Lưu ý, không lưu trữ thông tin nhạy cảm vì giá trị này được lưu trữ trên máy tính của người dùng.
  • expires: Ngày hết hạn ở định dạng dấu thời gian UNIX. Sau thời gian này cookie sẽ không thể truy cập được. Giá trị mặc định là 0.
  • path: Chỉ định đường dẫn trên máy chủ mà cookie sẽ có hiệu lực. Nếu được đặt thành /, cookie sẽ có sẵn trong toàn bộ domain.
  • domain: Chỉ định tên miền mà cookie có hiệu lực, ví dụ: www.laptrinhvienphp.com
  • sercure: Trường này, nếu có, chỉ ra rằng cookie chỉ được gửi nếu có kết nối HTTPS

Note: Nếu thời gian hết hạn của cookie được đặt thành 0 hoặc bị bỏ qua, cookie sẽ hết hạn vào cuối phiên (section), tức là cho đến khi trình duyệt đóng lại.

Dưới đây là một ví dụ sử dụng hàm setcookie() để tạo cookie có username và gán giá trị giá trị Em Vi cho nó. Và xác định rằng cookie sẽ hết hạn sau 30 ngày (30 ngày * 24 giờ * 60 phút * 60 giây).

<?php
// Setting a cookie
setcookie("username", "Em Vi", time()+30*24*60*60);
?>

Note: Tất cả những tham số ngoại trừ username đều là tùy chọn. Bạn cũng có thể thay thế một tham số với một chuỗi rỗng (”) để bỏ qua nó, tuy nhiên để bỏ qua expires thì nên sử dụng số 0, vì kiểu của nó là một số nguyên.

Cảnh báo: Không lưu trữ dữ liệu nhạy cảm trong cookie vì nó có khả năng bị người dùng “không trong sáng” thao túng. Hãy lưu trữ dữ liệu nhạy cảm một cách an toàn sử dụng section để thay thế.

3. Hướng dẫn truy cập giá trị của Cookie.

Biến superglobal PHP $ _COOKIE được sử dụng để truy xuất giá trị của cookie. Nó thường là một mảng kết hợp có chứa một danh sách tất cả các giá trị cookie được trình duyệt gửi, nó được khóa bằng tên cookie.

Giá trị cookie riêng lẻ có thể được truy cập bằng cách sử dụng ký hiệu mảng tiêu chuẩn.

Ví dụ: Để hiển thị cookie tên người dùng được đặt trong ví dụ trước, bạn có thể sử dụng đoạn mã sau đây.

<?php
// Truy cập một giá trị Cookie riêng lẻ
echo $_COOKIE["username"];
?>

Chúng ta nhận được kết của của ví dụ trên như sau:

Em Vi

Đấy là một cách làm tốt để kiểm tra xem cookie có được thiết lập hay không trước khi truy cập giá trị của nó. Để làm điều này, bạn có thể sử dụng hàm PHP isset(), như thế này:

<?php
// Các xác minh xem Cookie có được thiết lập hay không
  if(isset($_COOKIE["username"])){
      echo "Hi " . $_COOKIE["username"];
  } else{
      echo "Welcome Guest!";
  }
?>

Bạn có thể sử dụng hàm print_r() như print_r($ _ COOKIE); Để xem cấu trúc của mảng kết hợp $ _COOKIE này, nó giống như cách bạn với các mảng khác thôi.

4. Hướng dẫn Xóa Cookie trong PHP

Bạn có thể xóa cookie bằng cách gọi cùng hàm setcookie() với tên cookie và bất kỳ giá trị nào (chẳng hạn như chuỗi rỗng), tuy nhiên lần này bạn cần đặt ngày hết hạn trong quá khứ, như trong ví dụ dưới đây:

<?php
// Xóa Cookie
  setcookie("username", "", time()-3600);
?>

Note: Bạn nên truyền chính xác cùng một đường dẫn, tên miền và các đối số khác mà bạn đã sử dụng khi lần đầu tiên tạo cookie để đảm bảo rằng cookie bị xóa chính xác.

Tổng kết

Như vậy là qua bài này bạn đã được giới thiệu về Cookie trong PHP, cách thiết lập Cookie, Cách truy cập giá trị của Cookie và cả cách xóa Cookie.

Chúng ta sẽ thường xuyên sử dụng cookie để cá nhân hóa trình duyệt ví dụ theo tài khoản của người dùng, theo email họ đăng nhập…

5 TIP Học Lập trình PHP hiệu quả & Nhanh

PHP đã khá dễ học. Cùng với việc vận dụng 5 TIP Học Lập trình PHP hiệu quả này bạn sẽ nhanh chóng nắm bắt ngôn ngữ này.

PHP ngày nay vừa là ngôn ngữ / vừa là nền tảng được sử dụng rộng rãi nhất để phát triển các ứng dụng web.

PHP được đánh giá là dễ học nhất trong số các ngôn ngữ sử dụng để Lập trình Web. Có rất nhiều trang web hướng dẫn học PHP miễn phí rất hay trên mạng.

5 Tip Học Lập trình PHP hiệu quả
5 Tip Học Lập trình PHP hiệu quả

Cùng với việc vận dụng 5 TIP Học Lập trình PHP hiệu quả này bạn sẽ nhanh chóng nắm bắt ngôn ngữ này.

#TIP Học PHP hiệu quả 1: Xây dựng ngay một Website “Xấu tệ”

Sau khi bạn đã học PHP cơ bản (PHP Fundamental) thì hãy bắt tay xây dựng ngay một ứng dụng cho mình.

Và chắc chắn nó sẽ: “Xấu tệ” đầy “Bug

Nhưng đừng lo lắng làm gì.

Dự án này là để bạn tìm hiểu mọi khía cạnh của PHP. Các vấn đề như kết nối cơ sở dữ liệu, xử lý Form đăng ký, đăng nhập sẽ giúp bạn hiểu sâu hơn, nhớ kỹ hơn, thuần thục hơn là đọc đi đọc lại các bài học.

Ví dụ, bạn có thể bắt đầu xây dựng một trang web cơ bản (Đừng quan tâm vội đến việc nó xấu hay đẹp) chỉ cần có đủ các thành phần là được.

Việc này sẽ đòi hỏi bạn phải xử lý dữ liệu trong database, làm việc với section. Sau đó, kết hợp thêm các chức năng như upload tập tin, …. Theo thời gian, khi bạn hoàn thành một website (cho dù nó dở tệ) thì nó cũng giúp bạn có được kiến thức, kinh nghiệm gấp trăm lần đọc hiểu không.

#TIP Học PHP hiệu quả 2: Bắt đầu sử dụng MVC Framework ngay

Một khi bạn đã có thể làm ra 1 website từ đầu đến cuối (Mặc kệ nó tệ thế nào) thì đây là lúc để tìm hiểu về MVC Framework.

MVC là tên viết tắt của Model View Controller, và nó là một ‘kiểu lập trình’ được coi là mặc định khi lập trình website. Mình để nghị bạn tìm hiểu nó ngay lập tức.

MVC Framework chủ yếu cho phép bạn:

1. Tách PHP ra khỏi HTML, CSS và Javascript – Đây là một điều cần thiết cũng như một cách tốt để bạn có thể maintain (bảo trì) code sau này.

2. Lập trình Web theo Phương pháp Lập trình hướng đối tượng OOP mang lại nhiều lợi ích

Hãy thử làm lại trang web của bạn bằng MVC Framework, bạn sẽ thấy việc tổ chức code theo MVC có lợi như thế nào.

#TIP Học PHP hiệu quả 3: Đọc Document

Php.net là trang document của PHP, nó chứa rất nhiều tài liệu để bạn có thể đọc vào thời gian rảnh.

Trên này có các kiến thức hữu ích về viết mã PHP. Nếu bạn truy cập trang web để tìm một function cụ thể, thì bạn có thể đọc thêm rất rất nhiều thông tin.

Đây là tài liệu chuẩn, đầy đủ nhất về PHP.

#TIP Học PHP hiệu quả 4: Bắt đầu làm Freelancer

Nếu bạn đang học php thì rất có thể bạn đang muốn hành nghề Lập trình web hoặc một cái gì đó tương tự. Và nếu như bạn vẫn còn công việc khác, học thêm PHP chỉ để chuẩn bị chuyển nghề thì Freelacer là một kiểu làm việc bạn nên thử.

Rất nhiều trang web thị trường tự do đang có như freelancer.com, vlance.vn, freelancerviet… ở đây có nhiều người muốn tìm kiếm một Freelancer để làm website cho họ với chi phí thấp, làm việc online.

Hãy thử làm dự án thật vừa có tiền vừa cho bạn kinh nghiệm làm việc trực tiếp với khách hàng. Chắc chắn bạn sẽ có kinh nghiệm tốt hơn là làm dự án cá nhân đấy.

#TIP Học PHP hiệu quả 5: Xem dự án của người khác và học hỏi

Php được sử dụng lập trình từ webstie cho đến các blog, wordpress, …, nền tảng thương mại điện tử, cms, diễn đàn, thư viện hình ảnh, v.v.

Hãy thử dành thời gian để nghiên cứu các trang web phổ biến khác và xem nó được làm như thế nào, cách họ vận dụng PHP để xây dựng ra những tính năng thú vị.

Ví dụ bạn có thể học cách phát triển website trên nền tảng WordPress. Nền tảng này giúp bạn làm web nhanh, tiết kiệm thời gian, công sức.

Bạn cũng có thể sử dụng PHP để viết các Plug-in cho WordPress. Nếu biết cách, thu nhập từ việc viết Plug-in WordPress không hề nhỏ một tý nào luôn.

Với 5 TIP trên mình chúc bạn Học Lập trình PHP hiệu quả. Nhanh chóng trở thành Lập trình viên PHP để kiếm thật nhiều tiền.

#laptrinhvienphp #phpdev #niit #niiticthanoi

Tìm hiểu về hàm strstr(), strpbrk(), substr() trong PHP

Trong bài này chúng ta sẽ cùng tìm hiểu cách lấy ra một phần của một chuỗi trong Lập trình PHP.

Trong bài này chúng ta sẽ cùng tìm hiểu cách lấy ra một phần của một chuỗi trong Lập trình PHP.

Lấy ra một phần của một chuỗi trong Lập trình PHP.
Lấy ra một phần của một chuỗi trong Lập trình PHP.

Chúng ta sẽ tìm hiểu cách lấy ra một phần của một chuỗi bằng 3 phương thức strstr(), strpbrk() substr().

1. Hàm strstr() trong PHP

Hàm strstr() trong PHP được sử dụng để lấy một phần của chuỗi tính từ vị trí chỉ định đến hết chuỗi.

Cú pháp hàm strstr() trong PHP:

strstr(string,search,before_search)

Các tham số trong hàm strstr():

  • string: Bắt buộc. Chỉ định chuỗi để tìm kiếm
  • search: Bắt buộc. Chỉ định chuỗi tìm kiếm. Nếu tham số này là một số, nó sẽ tìm kiếm ký tự khớp với giá trị ASCII của số đó
  • before_search: Không bắt buộc. Một giá trị boolean có mặc định là ‘false’. Nếu được đặt thành ‘true’, nó sẽ trả về một phần của chuỗi trước lần xuất hiện đầu tiên của tham số tìm kiếm (không bao gồm search)

Ví dụ về cách sử dụng hàm strstr() trong PHP:

<?php
$email  = 'hello@niithanoi.edu.vn';
$domain = strstr($email, '@');
echo $domain; // @niithanoi.edu.vn

$user = strstr($email, '@', true); // Kể từ PHP 5.3.0
echo $user; // hello
?>

>>> Xem cách kiểm tra một chuỗi bên trong chuỗi khác bằng hàm strpos() trong PHP

2. Hàm strpbrk() trong PHP

Hàm strpbrk() tìm kiếm một chuỗi cho bất kỳ ký tự nào được chỉ định. Hàm này sẽ trả về chuỗi bắt đầu từ ký tự được tìm thấy, nếu không, nó trả về flase

Cú pháp hàm strpbrk() trong PHP:

strpbrk(string,charlist)

Các tham số trong hàm strpbrk():

  • string: Tham số bắt buộc chỉ định chuỗi để tìm kiếm
  • charlist: Tham số bắt buộc chỉ định ký tự cần tìm

Ví dụ về cách sử dụng hàm strpbrk() trong PHP:

<?php

$text = 'Cả lớp học Lập trình PHP';

// Kết quả "học Lập trình PHP" vì 'h' được khớp trước
echo strpbrk($text, 'ch');

// Kết quả "Lập trình PHP" vì strpbrk() phân biệt Hoa - thường
echo strpbrk($text, 'L');
?>

3. Hàm substr() trong PHP

m substr() trả về một phần của chuỗi với tham số chị định vị trí bắt đầu và độ dài của chuỗi dự định lấy về.

Cú pháp hàm substr() trong PHP:

substr(string,start,length)

Các tham số trong hàm substr():

  • string: Bắt buộc. Chỉ định chuỗi định lấy 1 phần từ đó
  • start: Bắt buộc. Chỉ định vị trí bắt đầu lấy (Số Dương lấy bắt đầu từ đầu chuỗi, Số Âm lấy bắt đầu từ cuối chuỗi, Số 0 lấy từ ký tự đầu tiên)
  • length: Tham số không bắt buộc. Chỉ định độ dài của chuỗi trả về. Mặc định là đến cuối chuỗi. (Số dương – Độ dài được trả về từ tham số bắt đầu. Số âm – Độ dài được trả về từ cuối chuỗi)

Ví dụ về cách sử dụng hàm substr() trong PHP:

Chúng ta cùng xem ví dụ về hàm substr() bên dưới, VD1

<?php
$rest = substr("abcdef", 1);     // returns "bcdef"
$rest = substr("abcdef", -2);    // returns "ef"
$rest = substr("abcdef", 3, 1);  // returns "d"
$rest = substr("abcdef", -3, 1); // returns "d"
?>

Ví dụ thứ 2

<?php
$rest = substr("abcdef", 0, -1);  // returns "abcde"
$rest = substr("abcdef", 2, -1);  // returns "cde"
$rest = substr("abcdef", 4, -4);  // returns false
$rest = substr("abcdef", -3, -1); // returns "de"
?>

Tổng kết

Trên đây là 3 hàm PHP cung cấp sẵn để lấy một phần chuỗi ra từ một chuỗi khác. Nếu chỉ muốn kiểm tra sự tồn tại của chuỗi thì có thể sử dụng hàm strpos().

Bài 23: Hướng dẫn Download file bằng PHP

Bạn có thể bắt buộc hình ảnh hoặc loại file khác tải (Download) trực tiếp xuống máy tính của người dùng bằng hàm readfile() của PHP.

Ở bài trước chúng ta đã học về upload file, hôm nay chúng ta sẽ học về cách Download file sử dụng PHP.

Download File trong PHP
Download File trong PHP

Download file trong PHP

Bình thường bạn không nhất thiết phải sử dụng bất kỳ ngôn ngữ nào như PHP để tải xuống hình ảnh, tệp zip, tài liệu pdf, tệp exe, v.v …

Nếu loại tệp đó được lưu trữ trong một thư mục có thể truy cập công khai, bạn chỉ cần tạo một đường link trỏ đến tệp đó và bất cứ khi nào người dùng nhấp vào liên kết, trình duyệt sẽ tự động tải tệp đó xuống.

Ví dụ:

<a href="downloads/test.zip">Download Zip file</a>
<a href="downloads/masters.pdf">Download PDF file</a>
<a href="downloads/sample.jpg">Download Image file</a>
<a href="downloads/setup.exe">Download EXE file</a>

Click vào đường link trỏ đến tệp PDF hoặc tệp Image sẽ không tải file xuống máy tính.

Nó sẽ chỉ mở file trong trình duyệt. Sau đó bạn có thể lưu nó. Tuy nhiên, các tệp zip và exe thì được tự động tải xuống.

Chức năng Download file sử dụng PHP

Bạn có thể bắt buộc hình ảnh hoặc loại file khác tải trực tiếp xuống máy tính của người dùng bằng hàm readfile() của PHP.

Ở đây chúng ta sẽ tạo một bộ sưu tập hình ảnh đơn giản cho phép người dùng tải xuống các tệp hình ảnh từ trình duyệt chỉ bằng một cú click chuột.

Hãy tạo một tệp có tên ‘image-gallery.php’ và đặt đoạn mã sau vào trong nó.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple Image Gallery</title>
<style type="text/css">
    .img-box{
        display: inline-block;
        text-align: center;
        margin: 0 15px;
    }
</style>
</head>
<body>
    <?php
    // Array containing sample image file names
    $images = array("kites.jpg", "balloons.jpg");
    
    // Loop through array to create image gallery
    foreach($images as $image){
        echo '<div class="img-box">';
            echo '<img src="images/' . $image . '" width="200" alt="' .  pathinfo($image, PATHINFO_FILENAME) .'">';
            echo '<p><a href="download.php?file=' . urlencode($image) . '">Download</a></p>';
        echo '</div>';
    }
    ?>
</body>
</html>

Nếu bạn xem mã ví dụ trên một cách cẩn thận, bạn sẽ thấy liên kết tải xuống dẫn đến file ‘download.php’, URL cũng chứa tên tệp hình ảnh dưới dạng chuỗi truy vấn.

Ngoài ra, chúng ta đã sử dụng hàm urlencode() của PHP để mã hóa tên tệp hình ảnh để nó có thể được truyền an toàn dưới dạng tham số URL, bởi vì tên tệp có thể chứa các ký tự không an toàn.

Đây là mã hoàn chỉnh của tệp ‘download.php‘ để bắt buộc tải xuống hình ảnh.

<?php
if(isset($_REQUEST["file"])){
    // Get parameters
    $file = urldecode($_REQUEST["file"]); // Decode URL-encoded string
    $filepath = "images/" . $file;
    
    // Process download
    if(file_exists($filepath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($filepath));
        flush(); // Flush system output buffer
        readfile($filepath);
        exit;
    }
}
?>

Tổng kết

Như vậy, bạn đã biết sử dụng PHP để bắt buộc Download file xuống máy tính người dùng. Bạn cũng có thể buộc tải xuống các định dạng tệp khác như word doc, tệp pdf, v.v.

Bài 22: 2 Bước Upload File lên Server trong PHP

Trong khuôn khổ bài học này, chúng ta sẽ tìm hiểu cách upload file lên server từ xa bằng cách sử dụng biểu mẫu HTML và PHP đơn giản.

Trong bài học này, bạn sẽ tìm hiểu cách Upload File (tải tệp) lên Web Server từ xa trong PHP.

Trong khuôn khổ bài học này, chúng ta sẽ tìm hiểu cách upload file lên server từ xa bằng cách sử dụng biểu mẫu HTML và PHP đơn giản.

2 bước upload file trong PHP
2 bước upload file trong PHP

Bạn có thể tải lên bất kỳ loại tệp nào như hình ảnh, video, file ZIP, tài liệu Microsoft Office, PDF, cũng như các file thực thi và một loạt các loại tệp khác.

Bước 1: Tạo form HTML để sử dụng Upload file

Ở đây mình sẽ tạo form đơn giản để có thể upload file. Nếu bạn muốn đẹp hơn thì có thể thêm CSS vào nhé.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Upload Form</title>
</head>
<body>
    <form action="upload-manager.php" method="post" enctype="multipart/form-data">
        <h2>Upload File</h2>
        <label for="fileSelect">Filename:</label>
        <input type="file" name="photo" id="fileSelect">
        <input type="submit" name="submit" value="Upload">
        <p><strong>Note:</strong> Chỉ định dạng .jpg, .jpeg, .gif, .png và tối đa 5MB.</p>
    </form>
</body>
</html>

Lưu ý:

Ngoài trường file-select, form upload phải sử dụng phương thức POST và phải chứa thuộc tính enctype = ‘Multipart/form-data’.

Thuộc tính này đảm bảo rằng dữ liệu biểu mẫu được mã hóa dưới dạng dữ liệu MIME mulitpart – được yêu cầu để tải lên số lượng lớn dữ liệu nhị phân như hình ảnh, âm thanh, video, v.v.

Bước 2: Viết mã Upload file lên server trong PHP

Đây là chương trình hoàn chỉnh của tệp ‘upload-manager.php’ mà mình đã tạo.

Nó sẽ lưu trữ tệp đã tải lên trong thư mục ‘upload’ và thực hiện một số kiểm tra bảo mật cơ bản như loại tệp và kích thước tệp để đảm bảo rằng người dùng tải lên đúng loại tệp và trong giới hạn cho phép.

<?php
// Kiểm tra nếu form đã submit
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Kiểm tra xem file đã tải lên mà không có lỗi
    if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $_FILES["photo"]["name"];
        $filetype = $_FILES["photo"]["type"];
        $filesize = $_FILES["photo"]["size"];
    
        // Xác nhận phần mở rộng của file
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("Error: Vui lòng chọn đúng định dạng file.");
    
        // Xác nhận kích thước file - tối đa 5MB
        $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) die("Error: Kích thước File quá lớn.");
    
        // Xác định loại file
        if(in_array($filetype, $allowed)){
            // Kiểm tra xem file có tồn tại trước khi upload hay không
            if(file_exists("upload/" . $filename)){
                echo $filename . " is already exists.";
            } else{
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename);
                echo "File của bạn đã upload thành công.";
            } 
        } else{
            echo "Error: Có vấn đề xảy ra trong quá trì Upload. vui lòng thử lại."; 
        }
    } else{
        echo "Error: " . $_FILES["photo"]["error"];
    }
}
?>

Lưu ý:

Chương trình trên ngăn chặn upload một tệp có cùng tên với một tệp hiện có trong cùng một thư mục.

Tuy nhiên, nếu bạn muốn cho phép tải tệp cùng tên chỉ cần thêm vào tên tệp bằng một chuỗi hoặc dấu thời gian ngẫu nhiên, như:

$ filename = time (). '_'. $ _FILES ['photo'] ['name'];

Đây là chương trình mình đã viết hoàn chỉnh. Bây giờ hãy đi vào chi tiết để xem cụ thể được viết như thế nào nhé:

Giải thích chương trình upload file trong PHP

Khi form được submit, tệp đã upload có thể được truy cập thông qua mảng siêu cấp có tên là $_FILES.

Ví dụ: Form Upload của chúng ta chứa trường select có tên là photo (tức là name=”photo”), nếu bất kỳ người dùng nào tải lên tệp bằng trường này, chúng ta có thể nhận được các chi tiết như tên, loại, kích thước, tên tạm thời hoặc bất kỳ lỗi nào đã xảy ra trong khi thử upload thông qua mảng kết hợp $_FILES [“photo”], như thế này:

  • $ _FILES [‘photo’] [‘name’] : Giá trị mảng này chỉ định tên gốc của tệp, bao gồm cả phần mở rộng tệp. Nó không bao gồm đường dẫn tập tin.
  • $_FILES[“photo”][“type”] : Giá trị mảng này chỉ định loại tệp.
  • $_FILES[“photo”][“size”] : Giá trị mảng này chỉ định kích thước tệp, tính bằng byte.
  • $_FILES[“photo”][“tmp_name”] : Giá trị mảng này chỉ định tên tạm thời bao gồm đường dẫn đầy đủ được gán cho tệp sau khi được tải lên máy chủ.
  • $_FILES[“photo”][“error”] : Giá trị mảng này chỉ định lỗi hoặc trạng thái code được liên kết với tệp tải lên, ví dụ: nó sẽ là 0, nếu không có lỗi

Đoạn code PHP trong ví dụ sau sẽ chỉ hiển thị chi tiết thông tin của tệp được tải lên và lưu trữ nó trong một thư mục tạm thời trên web server.

<?php
if($_FILES["photo"]["error"] > 0){
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
} else{
    echo "File Name: " . $_FILES["photo"]["name"] . "<br>";
    echo "File Type: " . $_FILES["photo"]["type"] . "<br>";
    echo "File Size: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>";
    echo "Stored in: " . $_FILES["photo"]["tmp_name"];
}
?>

Lưu ý:

Khi một tệp đã được tải lên thành công, nó sẽ tự động được lưu trữ trong một thư mục tạm thời trên máy chủ.

Để lưu trữ tệp này vĩnh viễn, bạn cần di chuyển nó từ thư mục tạm thời đến một vị trí cố định bằng cách sử dụng hàm move_uploaded_file() của PHP.

Tổng kết

Như vậy là bạn đã biết cách tải tệp (upload file) lên trên web server bằngN PHP. Bài tới chúng ta sẽ tìm hiểu về Download file

Bài 21: Làm việc với thu mục trong PHP

Trong bài học này, bạn sẽ học cách xử lý các vấn đề liên quan và làm việc với thư mục bằng PHP.

Trong bài học này, bạn sẽ học cách xử lý các vấn đề liên quan đến thư mục bằng PHP.

Làm việc với thư mục trong PHP
Làm việc với thư mục trong PHP

Làm việc với thư mục trong PHP

Trong bài trước, bạn đã học cách làm việc với các tệp trong PHP. Thì tương tự, trong PHP cũng cho phép bạn làm việc với các thư mục .

Ví dụ bạn có thể:

  • Mở một thư mục và đọc nội dung của nó,
  • Tạo hoặc xóa một thư mục
  • Liệt kê tất cả các tệp trong thư mục.
  • v.v.

1. Cách tạo một thư mục mới bằng PHP

Để tạo một thư mục mới bạn sử dụng hàm mkdir() của PHP với đường dẫn và tên của thư mục sẽ được tạo, như trong ví dụ dưới đây:

<?php
// Đường dẫn thư mục
$dir = "testdir";
 
// Kiểm tra thư mục đã tồn tại hay chưa
if(!file_exists($dir)){
    // Tạo một thư mục mới
    if(mkdir($dir)){
        echo "Tạo thư mục thành công.";
    } else{
        echo "ERROR: Không thể tạo thư mục.";
    }
} else{
    echo "ERROR: Thư mục đã tồn tại.";
}
?>

Lưu ý: Để làm cho hàm mkdir() hoạt động, các thư mục cha trong tham số đường dẫn thư mục phải tồn tại, ví dụ, nếu bạn chỉ định đường dẫn thư mục là testdir/subir thì thư mục testdir phải tồn tại nếu không PHP sẽ báo lỗi.

2. Cách sao chép file từ vị trí này sang vị trí khác trong PHP

Bạn có thể sao chép một file từ vị trí này sang vị trí khác bằng cách gọi hàm copy() trong PHP với các đường dẫn nguồn và đích của file làm đối số.

Nếu file đích đã tồn tại, nó sẽ bị ghi đè. Đây là một ví dụ tạo ra một bản sao của tệp ‘example.txt’ trong thư mục sao lưu.

<?php
// Đường dẫn file nguồn
$file = "example.txt";
 
// Đường dẫn file đích
$newfile = "backup/example.txt";
 
// Kiểm tra file cần copy có tồn tại hay không
if(file_exists($file)){
    // Tạo file copy
    if(copy($file, $newfile)){
        echo "Copy file thành công.";
    } else{
        echo "ERROR: File không thể copy.";
    }
} else{
    echo "ERROR: File không tồn tại.";
}
?>

Lưu ý: Để làm cho ví dụ này hoạt động, thư mục đích được sao lưu và tệp nguồn (tức là thư mục backup) phải tồn tại nếu không PHP sẽ báo lỗi.

3. Liệt kê tất cả các file trong một thư mục trong PHP

Bạn có thể sử dụng hàm scandir() của PHP để liệt kê các file và thư mục bên trong đường dẫn đã chỉ định.

Chúng ta sẽ thử tạo một hàm tùy chỉnh để liệt kê đệ quy tất cả các file trong một thư mục bằng PHP.

Kịch bản này sẽ rất hữu ích nếu bạn đang làm việc với cấu trúc thư mục được lồng sâu.

<?php
// Define một function để xuất các file trong một thư mục
function outputFiles($path){
    // Kiểm tra thư mục có tồn tại hay không
    if(file_exists($path) && is_dir($path)){
        // Quét tất cả các file trong thư mục
        $result = scandir($path);
        
        // Lọc ra các thư mục hiện tại (.) và các thư mục cha (..)
        $files = array_diff($result, array('.', '..'));
        
        if(count($files) > 0){
            // Lặp qua mảng đã trả lại
            foreach($files as $file){
                if(is_file("$path/$file")){
                    // Hiển thị tên File
                    echo $file . "<br>";
                } else if(is_dir("$path/$file")){
                    // Gọi đệ quy hàm nếu tìm thấy thư mục
                    outputFiles("$path/$file");
                }
            }
        } else{
            echo "ERROR: Không có file nào trong thư mục.";
        }
    } else {
        echo "ERROR: Thư mục không tồn tại.";
    }
}
 
// Gọi hàm
outputFiles("mydir");
?>

4. Cách liệt kê tất cả các file thuộc một loại nhất định

Trong khi làm việc trên cấu trúc thư mục và file, đôi khi bạn cần tìm ra một số loại tệp nhất định ở bên trong thư mục nào đó, ví dụ:

  • Chỉ liệt kê các tệp .text hoặc .png, v.v

Bạn có thể thực hiện hành động này một cách dễ dàng với hàm glob().

Đoạn code PHP trong ví dụ sau sẽ tìm kiếm thư mục documents và liệt kê tất cả các file có đuôi là .text. Nó sẽ không tìm kiếm file ở trong các thư mục con.

<?php
/* Tìm kiếm thư mục và lặp qua mảng.
Trả về các file có đuôi .txt */
foreach(glob("documents/*.txt") as $file){
    echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>

Hàm glob() cũng có thể được sử dụng để tìm tất cả các file trong một thư mục hoặc thư mục con của nó.

Hàm được định nghĩa trong ví dụ sau sẽ liệt kê đệ quy tất cả các file trong một thư mục, giống như chúng ta đã thực hiện trong ví dụ trước với hàm scandir().

<?php
// Define một function để xuất các file trong thư mục 
function outputFiles($path){
    // Kiểm tra thư mục có tồn tại hay không
    if(file_exists($path) && is_dir($path)){
        // Tìm kiếm các file trong thư mục này.
        $files = glob($path ."/*");
        if(count($files) > 0){
            // Lặp qua mảng đã trả về
            foreach($files as $file){
                if(is_file("$file")){
                    // Hiển thị tên file
                    echo basename($file) . "<br>";
                } else if(is_dir("$file")){
                    // Gọi đệ quy hàm nếu tìm thấy thư mục
                    outputFiles("$file");
                }
            }
        } else{
            echo "ERROR: Không tìm thấy file nào trong thư mục.";
        }
    } else {
        echo "ERROR: Thư mục không tồn tại.";
    }
}
 
// Gọi hàm
outputFiles("mydir");
?>

Tổng kết.

Như vậy là qua bài này bạn đã biết một số thao tác cơ bản để làm việc với thư mục trong PHP. Hãy thực hành lại các ví dụ để hiểu rõ các vấn đề về thư mục nhé.

Tìm hiểu về File System Function trong PHP

Hướng dẫn cách tạo, truy cập (hoặc đọc) và thao tác các tệp một cách linh hoạt bằng các hàm hệ thống tệp (file system
functions) của PHP.

Trong bài học này, bạn sẽ tìm hiểu cách tạo, truy cập (hoặc đọc) và thao tác các tệp một cách linh hoạt bằng các hàm hệ thống tệp (file system
functions
) của PHP.

Làm việc với File trong PHP

Vì PHP là ngôn ngữ lập trình phía máy chủ (server side programming language), nó cho phép bạn làm việc với các tệp và thư mục được lưu trữ trên web server.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo, truy cập và thao tác các tệp trên máy chủ web của mình bằng các hàm mà PHP cung cấp sẵn.

1. Mở file với hàm fopen() trong PHP

Để làm việc với một tệp tin, trước tiên bạn cần mở tệp tin ra đã chứ nhỉ?

Hàm fopen() của PHP được sử dụng để mở tệp. Cú pháp của hàm này được sử dụng như sau:

fopen(filename, mode)

Tham số đầu tiên được truyền cho fopen() chỉ định tên của tệp bạn muốn mở và tham số thứ hai chỉ định chế độ nào tệp sẽ được mở. Ví dụ:

<?php
  $handle = fopen("data.txt", "r");
?>

Các chế độ mở tệp tin trong PHP

  • r: Mở tệp để chỉ đọc.
  • r+: Mở tệp để đọc và viết.
  • w: Mở tệp chỉ để viết và xóa nội dung của tệp. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.
  • w+: Mở tệp để đọc và viết và xóa nội dung của tệp. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.
  • a: Nối. Mở tệp chỉ để viết. Giữ nguyên nội dung tệp bằng cách viết vào cuối tệp. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.
  • a+: Đọc / Nối. Mở tệp để đọc và viết. Giữ nguyên nội dung tệp bằng cách viết đến cuối tệp. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.
  • x: Mở tệp chỉ để viết. Trả về FALSE và tạo ra lỗi nếu tệp đã tồn tại. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.
  • x+: Mở tệp để đọc và viết. Trả về FALSE và tạo ra lỗi nếu tệp đã tồn tại. Nếu tệp không tồn tại, PHP sẽ cố gắng tạo nó.

Nếu bạn cố mở một tệp không tồn tại, PHP sẽ tạo một thông báo cảnh báo.

Vì vậy, để tránh các thông báo lỗi này, bạn phải luôn thực hiện kiểm tra đơn giản xem một tệp hoặc thư mục có tồn tại hay không trước khi thử truy cập nó, với hàm file_exists() trong PHP

Thực hiện như sau:

<?php
$file = "data.txt";
 
// Kiểm tra xem 1 tệp có tồn tại hay không
if(file_exists($file)){
    // Thử mở file
    $handle = fopen($file, "r");
} else{
    echo "ERROR: File không tồn tại.";
}
?>

Lưu ý: Làm việc với các tập tin và thư mục rất dễ bị lỗi.

Vì vậy, đó là một cách tốt nhất để thực hiện một số giải pháp nếu xảy ra lỗi, chương trình của bạn sẽ xử lý lỗi. Xem bài hướng dẫn xử lý lỗi trong PHP (PHP error handling).

2. Đóng tệp với hàm fclose() trong PHP

Khi bạn đã hoàn thành công việc với một tệp, nó cần phải được đóng lại. Hàm fclose() sẽ giúp bạn làm công việc này, như trong ví dụ sau:

<?php
$file = "data.txt";
 
// Kiểm tra xem 1 file có tồn tại hay không
if(file_exists($file)){
    // Mở file để đọc
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    /* Code thực thi hành động nào đó */
        
    // Đóng file lại
    fclose($handle);
} else{
    echo "ERROR: File does not exist.";
}
?>

Lưu ý: Mặc dù PHP tự động đóng tất cả các tệp đang mở khi tập lệnh kết thúc, nhưng đấy chỉ là sau khi thực hiện tất cả các hành động.

3. Đọc các tệp với hàm fread() trong PHP

Bây giờ bạn đã hiểu làm thế nào để mở và đóng một tệp bất kỳ nào đó.

Trong phần này, bạn sẽ học cách đọc dữ liệu từ một tệp. PHP có một số hàm để đọc dữ liệu từ một tệp.

Bạn có thể đọc từ chỉ một ký tự cho toàn bộ tệp chỉ bằng một thao tác:

Đọc cố định số lượng ký tự trong file bằng hàm fread()

fread(file handle, length in bytes)

Hàm này có hai tham số:

  • Một tệp xử lý
  • Số byte để đọc.

Ví dụ sau đọc 20 byte từ tệp ‘data.txt’ bao gồm cả khoảng trắng. Giả sử tập tin ‘data.txt’ chứa một đoạn văn bản:

“The quick brown fox jumps over the lazy dog.”

Chương trình cần viết sẽ là:

<?php
$file = "data.txt";
 
// Kiểm tra file có tồn tại hay không
if(file_exists($file)){
    // Mở một file ra để đọc
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    // Đọc 20 byte trong File này
    $content = fread($handle, "20");
        
    // Đóng file lại
    fclose($handle);
        
    // Hiển thị nội dung tệp tin
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>

Kết quả chúng ta nhận được sẽ là:

The quick brown fox

Đọc toàn bộ nội dung của File

Hàm fread() có thể được sử dụng kết hợp với hàm filesize() để đọc toàn bộ tệp cùng một lúc.

Chúng ta sẽ làm thế này:

  • Trước tiên, ta sử dụng hàm filesize() trả về kích thước của tệp theo byte.
  • Sau đó, sử dùng hàm fread() để đọc file với số byte mà hàm filesize() vừa trả về
<?php
$file = "data.txt";
 
// Kiểm tra xem file có tồn tại hay không
if(file_exists($file)){
    // Mở file để đọc
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    // Đọc toàn bộ file
    $content = fread($handle, filesize($file));
        
    // Đóng file lại
    fclose($handle);
        
    // Hiển thị nội dung
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>

Ví dụ trên sẽ tạo ra kết quả:

The quick brown fox jumps over the lazy dog.

Cách dễ nhất để đọc toàn bộ nội dung của tệp trong PHP là với hàm readfile().

Hàm này này cho phép bạn đọc nội dung của tệp mà không cần mở tệp. Ví dụ sau sẽ tạo ra cùng một kết quả như ví dụ trên:

<?php
$file = "data.txt";
 
// Kiểm tra xem file có tồn tại hay không
if(file_exists($file)){
    // Đọc và xuất toàn bộ file
    readfile($file) or die("ERROR: Cannot open the file.");
} else{
    echo "ERROR: File does not exist.";
}
?>

Ví dụ trên sẽ tạo ra kết quả:

The quick brown fox jumps over the lazy dog.

Một cách khác để đọc toàn bộ nội dung của tệp mà không cần mở tệp đó là với hàm file_get_contents().

Hàm này chấp nhận tên và đường dẫn đến một tệp và đọc toàn bộ tệp thành một biến chuỗi. Đây là một ví dụ:

<?php
$file = "data.txt";
 
// Kiểm tra xem file có tồn tại không
if(file_exists($file)){
    // Đọc toàn bộ tệp tin và biến thành chuỗi
    $content = file_get_contents($file) or die("ERROR: Cannot open the file.");
        
    // Hiển thị nội dung file
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>

Đây là một phương pháp nữa để đọc toàn bộ dữ liệu từ một tệp là hàm tệp () của PHP.

Nó thực hiện một công việc tương tự như hàm file_get_contents(), nhưng nó trả về nội dung tệp dưới dạng một mảng các dòng, thay vì một chuỗi.

Mỗi phần tử của mảng trả về tương ứng với một dòng trong tệp.

Một cách khác là sử dụng hàm file_put_contents().

Nó là đối tác của hàm file_get_contents () và cung cấp một phương pháp dễ dàng ghi dữ liệu vào một tệp mà không cần phải mở nó.

Hàm này chấp nhận tên và đường dẫn đến một tệp cùng với dữ liệu được ghi vào tệp. Đây là một ví dụ:

<?php
$file = "note.txt";
    
// Tạo ra một chuỗi để thử nghiệm
$data = "The quick brown fox jumps over the lazy dog.";
    
// Ghi dữ liệu vào file
file_put_contents($file, $data) or die("ERROR: Cannot write the file.");
    
echo "Data written to the file successfully.";
?>

Nếu tệp được chỉ định trong hàm file_put_contents() đã tồn tại, PHP sẽ ghi đè lên nó theo mặc định.

Nếu bạn muốn giữ lại nội dung của tệp, bạn có thể gắn nhãn FILE_APPEND làm tham số thứ ba cho hàm file_put_contents().

Nó chỉ đơn giản là nối thêm dữ liệu mới vào tệp thay vì ghi đè lên nó. Đây là một ví dụ:

<?php
$file = "note.txt";
    
// Tạo ra một chuỗi để thử nghiệm
$data = "The quick brown fox jumps over the lazy dog.";
    
// Ghi dữ liệu vào file
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file.");
    
echo "Data written to the file successfully.";
?>

Đổi tên tệp với hàm rename() trong PHP

Bạn có thể đổi tên một tệp hoặc thư mục bằng cách sử dụng hàm rename() của PHP, như thế này:

<?php
$file = "file.txt";
 
// Kiểm tra xem file có tồn tại hay không
if(file_exists($file)){
    // Đổi tên của file
    if(rename($file, "newfile.txt")){
        echo "File renamed successfully.";
    } else{
        echo "ERROR: File cannot be renamed.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

Xóa các tệp với hàm unlink() trong PHP

Bạn có thể xóa các tệp hoặc thư mục bằng hàm unlink() của PHP, như thế này:

<?php
$file = "note.txt";
 
// Kiểm tra file có tồn tại hay không
if(file_exists($file)){
    // Xóa file
    if(unlink($file)){
        echo "File removed successfully.";
    } else{
        echo "ERROR: File cannot be removed.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

Các hàm thao tác với file trong PHP khác

Bên dưới đây mình sẽ cung cấp thêm về một số hàm thao tác với tệp trong PHP hữu ích khác có thể được sử dụng để đọc và ghi các tệp động.

  • fgetc(): Đọc một ký tự tại một thời điểm.
  • fgets(): Đọc một dòng tại một thời điểm
  • fgetcsv(): Đọc một dòng các giá trị được cách nhau bằng dấu phẩy
  • filetype(): Trả về kiểu của file đó
  • feof(): Kiểm tra xem tệp tin đã kết thúc hay chưa
  • is_file(): Kiểm tra xem đây có phải là 1 file bình thường
  • is_dir(): Kiểm tra xem đây có phải là một thư mục
  • is_executable(); Kiểm tra xem đây có phải file thực thi
  • realpath(): Trả về tên dường dẫn tuyệt đối
  • rmdir(): Xóa một thư mục trống

Tổng kết

Như vậy là qua bài học này bạn đã được tìm hiểu về cách mở tệp, đóng tệp, đọc tệp, ghi tệp, xóa bỏ tệp

Thao tác với tệp là hành động rất quan trọng khi lập trình web. Vì thế, hãy luyện tập thêm để thật sự thuần thục cách thao tác với tệp bằng các hàm PHP cung cấp sẵn bạn nhé.