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 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é.

Bài 19: Hướng dẫn iclude và require trong PHP

Trong bài học này chúng ta sẽ học về include và require trong lập trình PHP. Học Lập Trình PHP từ A – Z

Trong bài học này chúng ta sẽ học về include và require trong lập trình PHP.

Yêu cầu một file PHP vào một file PHP khác trong lập trình PHP

Câu lệnh include()require() cho phép bạn load một tệp PHP vào trong một tệp PHP khác.

Inculde một tệp tạo ra kết quả tương tự như sao chép mã từ tệp được chỉ định và dán vào vị trí nơi nó được gọi.

Bạn có thể tiết kiệm rất nhiều thời gian và làm việc thông qua việc include các tệp.

Chỉ cần lưu trữ một đoạn mã trong một tệp riêng biệt và đưa nó vào bất cứ nơi nào bạn muốn bằng cách sử dụng các câu lệnh include() và require() thay vì copy / paste hay viết lại code nhiều lần.

Trong tất cả các trang của trang web chúng ta thường có những đoạn header, footer và menu giống nhau.

Việc viết riêng từng file header, footer, menu

giúp bạn include chúng ở bất kỳ trang nào mà không cần phải viết lại mấy đoạn code đó.

Cú pháp cơ bản của câu lệnh include () và require() có thể được viết như sau:

// Cú pháp include
include("path/to/filename");
// Hoặc
include "path/to/filename";

// Cú pháp require
require("path/to/filename");
// Hoặc
require "path/to/filename";

TIP: Giống như các câu lệnh print và echo, bạn có thể bỏ qua dấu ngoặc đơn trong khi sử dụng các câu lệnh include và require như đã trình bày ở trên:

Ví dụ sau đây sẽ cho bạn thấy cách bao gồm các đoạn code header, footer và menu chung được lưu trữ trong các tệp ‘header.php’, ‘footer.php’ và ‘menu.php’ riêng biệt trong tất cả các trang của trang web của bạn.

Sử dụng kỹ thuật này, bạn có thể cập nhật tất cả các trang của trang web cùng một lúc bằng cách thực hiện các thay đổi trong một tệp, việc này giúp tiết kiệm rất nhiều công sức khi lập trình.

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Tutorial Republic</title>
</head>
<body>
<?php include "header.php"; ?>
<?php include "menu.php"; ?>
    <h1>Welcome to Our Website!</h1>
    <p>Here you will find lots of useful information.</p>
<?php include "footer.php"; ?>
</body>
</html>

Trong ví dụ trên thì bạn có thể thấy, thay vì viết mã dài loằng ngoằng cho header, footer và menu thì chúng ta nên tách ra file riêng.

Sau đó khi nào muốn dùng thì chỉ cần include hoặc require là xong.

Khi bạn thực hiện thay đổi trong các file đó thì tất cả các nơi chúng được sử dụng sẽ tự động cập nhật theo. (Quá tiết kiệm thời gian luôn).

=> Dễ quản lý, dễ bảo trì code nữa.

Sự khác nhau giữa câu lệnh include và riquire trong PHP

Bạn có thể suy nghĩ:

  • Nếu chúng ta có thể gọi các tệp bằng cách sử dụng câu lệnh include() thì tại sao chúng ta cần có require()?

Thông thường, câu lệnh require() hoạt động như include().

Sự khác biệt duy nhất là:

  • Câu lệnh include() sẽ chỉ tạo cảnh báo PHP nhưng cho phép tiếp tục thực thi tập lệnh nếu không tìm thấy tệp được include.
  • Trong khi câu lệnh require() sẽ tạo ra ném ra một lỗi và dừng thực thi tập lệnh luôn.

Ví dụ:

<?php require "my_variables.php"; ?>
<?php require "my_functions.php"; ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title><?php displayTitle($home_page); ?></title>
</head>
<body>
<?php include "header.php"; ?>
<?php include "menu.php"; ?>
    <h1>Welcome to Our Website!</h1>
    <p>Here you will find lots of useful information.</p>
<?php include "footer.php"; ?>
</body>
</html>

Chạy đoạn mã trên và xem thử kết quả.

Lưu ý: Bạn nên sử dụng câu lệnh require() nếu bạn nhất định cần đến các tệp đó để chương trình tiếp tục chạy được ổn định.

Cách sử dụng câu lệnh Include_once và require_once trong PHP

Nếu bạn vô tình gọi cùng một tệp (thường là các function hoặc class) nhiều hơn một lần trong code của bạn bằng cách sử dụng các câu lệnh include() hoặc require(), nó có thể gây ra xung đột.

Để ngăn chặn tình huống này, PHP cung cấp các câu lệnh include_oncecâu lệnh require_once.

Các câu lệnh này hoạt động theo cùng một cách như include và require nhưng nó có một ngoại lệ.

Các câu lệnh include_once và require_once sẽ chỉ được thêm vào một lần ngay cả khi được yêu cầu thêm vào lần thứ hai, tức là nếu tệp chỉ định đã được đưa vào trước đó thì tệp đó sẽ không được thêm vào lại.

Để hiểu rõ hơn về cách thức hoạt động của nó, hãy xem một ví dụ. Giả sử chúng ta có tệp ‘my_fifts.php’ với code như sau:

<?php
function multiplySelf($var){
    $var *= $var; // multiply variable by itself
    echo $var;
}
?>

Đây là code file PHP khác trong đó chúng ta sẽ include tệp ‘my_fifts.php’.

<?php
// Including file
require "my_functions.php";
// Calling the function
multiplySelf(2); // Output: 4
echo "<br>";
 
// Including file once again
require "my_functions.php";
// Calling the function
multiplySelf(5); // Doesn't execute
?>

Khi bạn chạy đoạn mã trên, bạn sẽ thấy thông báo lỗi đại loại như sau:

“Fatal error: Cannot redeclare multiplySelf()”

Điều này xảy ra vì ‘my_fifts.php’ được thêm vào đến hai lần, có nghĩa là hàm multiplySelf() được định nghĩa hai lần.

Điều này khiến PHP dừng thực thi tập lệnh và gây ra lỗi nghiêm trọng. Bây giờ viết lại ví dụ trên với require_once.

<?php
// Including file
require_once "my_functions.php";
// Calling the function
multiplySelf(2); // Output: 4
echo "<br>";
 
// Including file once again
require_once "my_functions.php";
// Calling the function
multiplySelf(5); // Output: 25
?>

Như bạn có thể thấy, bằng cách sử dụng require_once() thay vì require(), chương trình đã hoạt động đúng như chúng ta mong đợi.

Tổng kết

Như vậy là bạn đã biết cách sử dụng include / include_once và require / require_once trong PHP. Bài tiếp theo chúng ta sẽ tìm hiểu về file sytem function trong PHP.

Bài 18: Ngày (Date) và giờ (time) trong PHP

Trong bài học về PHP này, bạn sẽ học cách trích xuất hoặc định dạng ngày và giờ trong PHP.

Trong bài học về PHP này, bạn sẽ học cách trích xuất hoặc định dạng ngày và giờ trong PHP.

Hàm date và hàm time trong PHP

Hàm date() trong PHP

Hàm date () của PHP chuyển đổi dấu thời gian thành ngày và giờ dễ đọc hơn.

Máy tính lưu trữ ngày và giờ theo định dạng có tên là Dấu thời gian UNIX, tính thời gian là số giây kể từ khi bắt đầu thời kỳ Unix (midnight Greenwich có nghĩa là vào ngày 1 tháng 1 năm 1970 tức là ngày 1 tháng 1 năm 1970 00:00:00 GMT)

Vì đây là định dạng không thân thiện để chúng ta dễ dàng đọc hiểu, vậy nên:

  • PHP chuyển đổi dấu thời gian thành định dạng có thể đọc được cho con người
  • Và ngược lại, Chuyển ngày từ ký hiệu thân thiện thành dấu thời gian mà máy tính hiểu được.

Cú pháp của hàm date() trong PHP được viết như sau:

date(format, timestamp)

Tham số format của hàm date () là bắt buộc, chỉ định định dạng của ngày và giờ trả về.

Tuy nhiên, timestamp là một tham số tùy chọn, nếu không được truyền vào thì ngày và giờ hiện tại sẽ được sử dụng.

Ví dụ, các khối lệnh sau đây hiển thị ngày hôm nay:

<?php
  $today = date("d/m/Y");
  echo $today;
?>

Lưu ý: Hàm date() của PHP trả về ngày và giờ hiện tại theo đồng hồ tích hợp của máy chủ web nơi chương trình được thực thi. Nếu bạn chạy trên localhost thì nó sẽ lấy định dạng theo máy tính của bạn.

Định dạng Ngày và Giờ với PHP

Tham số format của hàm date() trên thực tế là một chuỗi có thể chứa nhiều ký tự cho phép bạn tạo một chuỗi ngày chứa các thành phần khác nhau của ngày và giờ, như ngày trong tuần, sáng (AM_) hoặc chiều (PM), v.v …

Dưới đây là một số các ký tự định dạng liên quan đến ngày thường được sử dụng:

  • d – Đại diện cho ngày trong tháng: Hai chữ số có số 0 đứng đầu (01 hoặc 31)
  • D – Đại diện cho ngày trong tuần dưới dạng chữ viết tắt (từ Mon đến Sun)
  • m – Biểu thị tháng bằng số có số 0 đứng đầu (01 hoặc 12)
  • M – Đại diện cho tháng bằng văn bản , viết tắt (từ Jan đến Dec)
  • y – Đại diện cho năm bằng hai chữ số (01 hoặc 19)
  • Y – Năm đại diện bằng bốn chữ số (2001 hoặc 2019)

Các phần của thời gian có thể được phân tách bằng cách chèn các ký tự khác, như dấu gạch nối (-), dấu chấm (.), Dấu gạch chéo (/) hoặc dấu cách để thêm định dạng hình bổ sung:

<?php
  echo date("d/m/Y") . "<br>";
  echo date("d-m-Y") . "<br>";
  echo date("d.m.Y");
?>

Lưu ý: Bạn có thể sử dụng hàm date() của PHP để tự động cập nhật thời hạn bản quyền trên trang web của mình, như:

Copyright @ 2002-<?php echo date("Y")?> 

Tương tự, bạn có thể sử dụng các ký tự sau để định dạng chuỗi thời gian:

  • h – Biểu diễn giờ ở định dạng 12 giờ với các số 0 đứng đầu (01 đến 12)
  • H – Biểu thị giờ ở định dạng 24 giờ với các số 0 đứng đầu (00 đến 23) 
  • i – Biểu thị số phút với các số 0 đứng đầu (00 đến 59) 
  • s – Đại diện cho giây với các số 0 đứng đầu (00 đến 59) 
  • a – Đại diện cho chữ thường thời gian trước buổi trưa hoặc sau buổi trưa (am hoặc pm)
  • A – Đại diện cho chữ hoa thời gian trước buổi trưa hoặc sau buổi trưa (AM hoặc PM)
<?php
  echo date("h:i:s") . "<br>";
  echo date("F d, Y h:i:s A") . "<br>";
  echo date("h:i a");
?>

Hàm time() trong PHP

Hàm time() được sử dụng để lấy thời gian hiện tại dưới dạng Unix timestamp (số giây kể từ khi bắt đầu thời kỳ Unix: ngày 1 tháng 1 năm 1970 00:00:00 GMT).

<?php
  // Thử hiển thị thời gian hiện tại: 10:32:47 ngày 15/04/2019 
  $timestamp = time();
  echo($timestamp);
?>

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

1555324367

Chúng ta có thể chuyển $timestamp này thành ngày có thể đọc được của con người thông qua việc chuyển nó bằng hàm date() đã được giới thiệu trước đó.

<?php
  $timestamp = 1555324367;
  echo(date("F d, Y h:i:s", $timestamp));
?>
April 15, 2019 10:32:47

Hàm mktime() trong PHP

Hàm mktime() được sử dụng để tạo dấu thời gian dựa trên ngày và giờ cụ thể.

Nếu không có ngày và giờ được cung cấp, dấu thời gian cho ngày và giờ hiện tại sẽ được trả về.

Cú pháp của hàm mktime() có thể được cung cấp với:

mktime(hour, minute, second, month, day, year)

Ví dụ sau hiển thị dấu thời gian tương ứng với 3:20:12 chiều ngày 10 tháng 5 năm 2014:

<?php
// Create the timestamp for a particular date
echo mktime(13, 45, 00, 4, 16, 2019);
?>

Kết quả nhận được là:

1555422300

Lưu ý: Bạn có thể bỏ qua bao nhiêu đối số tùy thích và giá trị tương ứng với thời gian hiện tại sẽ được sử dụng thay thế. Nếu bạn bỏ qua tất cả các đối số, hàm mktime() sẽ trả về dấu thời gian UNIX tương ứng với ngày và giờ hiện tại, giống như time().

Hàm mktime() cũng có thể được sử dụng để tìm tên ngày trong tuần tương ứng với một ngày cụ thể.

Để thực hiện việc này, chỉ cần sử dụng ký tự ‘l’ (chữ thường ‘L’) với dấu thời gian của bạn, như trong ví dụ sau, hiển thị ngày rơi vào ngày 16 tháng 4 năm 2019:

<?php
// Get the weekday name of a particular date
echo date('l', mktime(0, 0, 0, 4, 16, 2019));
?>

Hôm nay là thứ 3, và kết quả sẽ trả về là:

Tuesday

Hàm mktime() cũng có thể được sử dụng để tìm một ngày cụ thể trong tương lai sau một khoảng thời gian cụ thể.

Như trong ví dụ sau, ngày nào sẽ hiển thị ngày rơi sau 30 tháng kể từ ngày hiện tại?

<?php
// Hôm nay là 16 tháng 4 năm 2019
$futureDate = mktime(0, 0, 0, date("m")+30, date("d"), date("Y"));
echo date("d/m/Y", $futureDate);
?>

30 tháng sau kể từ ngày 16 tháng 4 năm 2019 sẽ là:

16/10/2021

Tổng kết

Như vậy là bạn đã biết sử dụng cơ bản các hàm date(), time(), mktime() . Chúng ta sẽ tìm hiểu cụ thể hơn nếu sau này gặp các trường hợp và yêu cầu cụ thể.

Hoặc bạn có thể tìm hiểu thêm về các hàm date, time trong PHP tại đây