Hướng dẫn dùng inc files trong PHP

  • Trang chủ
  • Hướng dẫn học
  • Học PHP
  • PHP include và require

Định nghĩa và cách dùng include và require

  • include hoặc require tiện lợi cho việc sử dụng những phần dùng chung, ví dụ header, footer, sidebar hoặc một function dùng chung nào đó.
  • Đối với những phần dùng chung này, ta tách riêng ra 1 file PHP, sau đó sử dụng include hoặc require để kết nối.
  • Điều này tiện lợi cho việc chỉnh sửa, thay vì chỉnh nhiều trang, giờ thì ta chỉ việc chỉnh file PHP đã tách riêng là được.
  • Sự khác biệt giữa includerequire:

    • include: code bên dưới include sẽ tiếp tục thực thi, cho dù file được include có tồn tại hay không.
    • require: code bên dưới require sẽ không được thực thi, nếu file được require không tồn tại.

include

  • Được dùng để chèn một file PHP vào một file PHP khác.

Cấu trúc

<?php
include "đường_dẫn_file/tên_file";
?>

Ví dụ:

<?php include "include/header.php"; ?>
<div>Content</div>
<?php include "include/footer.php"; ?>

Ta thấy nội dung 2 file header.phpfooter.php đã được thêm vào.

Download file ví dụ

include với file không tồn tại

<?php include "include/header.php"; ?>  // Giả sử file header.php không có
<div>Content</div>
<?php include "include/footer.php"; ?>

Warning: include(header.php): failed to open stream: No such file or directory in C:\xampp\htdocs\example\index.php on line 1

Warning: include(): Failed opening 'header.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\example\index.php on line 1

Content

Ta thấy trình duyệt gửi cảnh báo, tuy nhiên những PHP vẫn thực thi những đoạn code bên dưới.

require

  • Được dùng để chèn một file PHP vào một file PHP khác, file được chèn bắt buộc phải tồn tại, nếu không sẽ không thực thi những đoạn code tiếp theo.
  • Thường được dùng để chèn nội dung kết nối database, function login, payment, ...
  • Cách sử dụng tương tự như include.

Cấu trúc

<?php
require "đường_dẫn_file/tên_file";
?>

Ví dụ:

<?php require "require/header.php"; ?>
<div>Content</div>
<?php require "require/footer.php"; ?>

Nội dung 2 file header.phpfooter.php đã được thêm vào.

Download file ví dụ

require với file không tồn tại

<?php require "require/header.php"; ?>  // Giả sử file header.php không có
<div>Content</div>
<?php require "require/footer.php"; ?>

Warning: require(header.php): failed to open stream: No such file or directory in C:\xampp\htdocs\example\index.php on line 1

Fatal error: require(): Failed opening required 'header.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\example\index.php on line 1

Ta thấy trình duyệt gửi cảnh báo, và những đoạn code bên dưới đã không được thực thi.

PHP include và require với path

Lưu ý: nếu chưa được cấu hình đường dẫn tương đối (relative path) thì dễ xảy ra lỗi khi dùng
/đường_dẫn_file/tên_file (trong trường hợp phân cấp thư mục), khắc phục tình trạng này có 2 cách:

Sử dụng đường dẫn tuyệt đối

Sử dụng cách này cần kích hoạt allow_url_fopenallow_url_include sang On trong php.ini

<?php include "http://localhost/include/header.php"; ?>
<div>Content</div>
<?php include "http://localhost/include/footer.php"; ?>

Download file ví dụ

Sử dụng DOCUMENT_ROOT

<?php include $_SERVER["DOCUMENT_ROOT"] . "/include/header.php"; ?>
<div>Content</div>
<?php include $_SERVER["DOCUMENT_ROOT"] . "/include/footer.php"; ?>

Download file ví dụ

  • Các hàm tạo file, mở - đọc - ghi - đóng file
  • Hàm fopen và fclose - mở và đóng file
  • Hàm fwrite / fputs - ghi nội dung vào file
  • Ví dụ - ghi thêm nội dung vào file
  • Hàm fread, đọc nội dung file
  • Hàm fgets đọc một chuỗi
  • Đọc toàn bộ file, mảng chuỗi
  • Hàm file_get_contents
  • Hàm file_put_contents
  • Một số hàm về file

Các hàm tạo, đọc, ghi file

Phần này trình bày thao tác với file cơ bản với các tác vụ như mở file, đọc nội dung của file trong PHP với các hàm như: fopen() fwrite() fclose() file() file_get_contents() file_put_contents(). Bước đầu tập trung chủ yếu làm việc với chuỗi, còn kỹ thuật làm việc với dữ liệu nhị phân (các mảng byte) sẽ ở nội dung khác.

PHP đưa ra một số hàm với mục đích để làm việc với file như tạo file, đọc file, upload, biên tập ...

Hàm fopen và fclose trong PHP

fopen() là hàm mở file để chuẩn bị đọc, ghi thông tin, cú pháp như sau:

$file = fopen($filename, $mode);

$filename tên file với đường dẫn đầy đủ. Hoặc là URL của file cần mở. $mode chế độ mở file với một số giá trị như sau (chú ý khi mở file, tùy mode mà con trỏ xác định vị trí đang làm việc có thể ở đầu hoặc cuối file, các mode ở dưới thì aa+ con trỏ ở cuối - nối thêm vào file, còn các mode khác con trỏ ở đầu.):

  • "r" - Mở file chỉ để đọc
  • "r+" - Mở file dể đọc và ghi
  • "w" - Mở file chỉ để ghi, khi mở nội dung trong file bị xóa sạch hoặc nếu file đó không tồn tại thì sẽ cố gắng tạo ra file mới.
  • "w+" - Mở file có thể đọc / ghi, khi mở nội dung trong file bị xóa sạch hoặc nếu file đó không tồn tại thì sẽ cố gắng tạo ra file mới.
  • "a" - Mở file chỉ để ghi, bắt đầu ghi ở vị trí cuối file, có tạo file mới nếu không tồn tại.
  • "a+" - Mở file để đọc/ghi.
  • "x" - Tạo file mới để ghi. Trả về false và phát sinh lỗi nếu file đã có
  • "x+" - Tạo file mới đọc/ghi. Trả về false và phát sinh lỗi nếu file đã có.
  • "c" - Mở file chỉ ghi hoặc tạo mới nếu không tồn tại.
  • "c+" - Mở file đọc/ghi hoặc tạo mới nếu không tồn tại.

Nếu mở file thành công nó trả về tài nguyên gắn với stream của file, từ tài nguyên này dùng các hàm khác nhau để đọc, ghi, di chuyển con trỏ.

Hàm feof($file) là hàm cho biết vị trí đang ở cuối file hay không, trả về true là ở cuối file.

Sau khi thực hiện các tác vụ trên tài nguyên file đang mở thì phải đóng lại để giải phóng tài nguyên bằng cách gọi hàm fclose

Ví dụ sau tạo ra file file.txt, file tạo ra ở cùng với thư mục chứa code PHP, kết quả trả về là tài nguyên lưu vào $myfile.

$myfile = fopen("file.txt", "w");

    ...

// đóng file
fclose($myfile);
Hàmchức năng
fopen($filename, $mode) Mở file, tạo file mới
fclose($stream) Đóng file đang mở
feof($stream) Trả về true nếu con trỏ ở cuối file

Ghi dữ liệu vào file với hàm fwrite / fputs trong PHP

Sau khi file đã được mở thì bạn có thể ghi dữ liệu (Binary-safe, chuỗi) cần thiết vào file, để làm điều đó dùng hàm fwrite() cũng chính là hàm fputs

fwrite($myfile, $txt);

//$myfile: là file đã được mở để ghi
//$text: là chuỗi cần ghi vào file.

Ví dụ sau ghi lại tên hai người vào file names.txt

<?php
    // Mở file để ghi (nội dung cũ bị xóa) hoặc tạo file mới nếu không tồn tại
    $myfile = fopen("names.txt", "w");
    
    $txt = "John\n";
    fwrite($myfile, $txt);
    $txt = "David\n";
    fwrite($myfile, $txt);
    
    fclose($myfile);
    
    /* Nộ dung file:
    John
    David
    */
?>

Chú ý trước khi gọi hàm fwrite() cần phải gọi hàm fopen() và cuối cùng sau khi ghi xong các nội dung vào file thì cần gọi fclose() để đóng file thu hồi tài nguyên hệ thống.

Dùng ký hiệu \n để ghi dòng mới (xuống dòng).

Ví dụ, ghi thêm nội dung vào file

Nếu muốn nối thêm nội dung vào file, bạn cần mở file với chế độ nối file 'a', Ví dụ:

<?php
    $myFile = "test.txt";
    $fh = fopen($myFile, 'a');
    fwrite($fh, "Some text");
    fclose($fh);
?>

Khi mở file bằng chế độ 'a' con trỏ file sẽ trỏ đến cuối file, đảm bảo rằng nội dung ghi sẽ nối vào file

Đọc nội dung file, hàm fread trong PHP

Để đọc các byte trong file, sử dụng hàm fread như sau:

fread($stream,$length);

Với $stream là file đã mở để đọc và $length là số byte cần đọc. Bạn có thể dùng hàm filesize($filename) để lấy cỡ file (bao nhiêu byte). Ví dụ sau, mở một file ảnh từ địa chỉ URL, sau đó đọc toàn bộ nội dung của file, lưu lại file trên đĩa

<?php
    $urlImage = 'https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/imgs/html-001.png';
    $fImage = fopen($urlImage, 'r');

    // Đọc đến cuối file, mõi lần đọc 4000 byte, lưu dữ liệu đọc được vào $data
    $data = null;
    while (!feof($fImage))
    {
        $data .= fread($fImage, 4000);
    }
    fclose($fImage);
    echo strlen($data) . ' byte đọc được <br>';

    // Lưu dữ liệu đọc được vào file test.png
    $filename = __DIR__ .'/test.png';
    $streamwrite = fopen($filename, 'w');
    fwrite($streamwrite, $data);
    fclose($streamwrite);
    echo 'Lưu file tại:<br>' . $filename;
?>

Đọc một chuỗi trong file với hàm fgets trong PHP

Hàm fgets($file) đọc một dòng tại vị trí con trỏ file hiện tại. Nếu vị trí con trỏ ở cuối file hàm sẽ trả về false / lỗi. Để kiểm tra con trỏ hiện tại ở cuối không dùng hàm feof($file), nếu trả về true là ở cuối.

Ví dụ, mở file đọc tất cả các dòng:

<?php
// Mở file để đọc - con trỏ ở đầu
$myfile = fopen("https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md", "r");

// Đọc từng dòng của file cho đến khi con trỏ dịch đến cuỗi file (hết file)
while(!feof($myfile)) {
    $line = fgets($myfile);
    echo $line. "
"; } fclose($myfile); ?>

Đọc toàn bộ nội dung file trong PHP

Hàm file() đọc nội dung của file và đưa vào một mảng. Mỗi phần tử của mảng tương ứng với một dòng của file.

<?php
    $read = file('https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md');
    foreach ($read as $line) {
        echo $line ."<br>";
    }

?>

Đọc toàn bộ nội dung file với hàm file_get_contents trong PHP

Hàm file_get_contents($filename) - đọc toàn bộ nội dung một file trả về một chuỗi là nội dung đó, tham số chỉ ra là tên filec cần đọc

$content = file_get_contents('https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md');
echo $content;

Hàm file_put_contents trong PHP

Hàm file_put_contents($filename, $data, $flag = 0) lưu dữ liệu vào file có tên $filename, dữ liệu $data là một chuỗi, mảng dữ liệu. Nếu $flag = 0 sẽ ghi đè dữ liệu file nếu file tồn tại. Nếu $flag = FILE_APPEND thì nối thêm dữ liệu vào file.

// Ghi nói thêm một chuỗi vào file
file_put_contents('names.txt', 'xuanthulab', FILE_APPEND);
Hàm về fileDiễn giải
unlink($filename) Hàm unlink trong PHP, dùng để xóa file trên đĩa
copy($filename_source, $$filename_dest) Hàm copy trong PHP, dùng để copy file trên đĩa
rename($oldname, $newname) Hàm copy trong PHP, dùng để đổi tên file trên đĩa
file_exists($filename) Hàm file_exists trong PHP, trả về true thì file đang tồn tại