Ngu ngơ học làm web (77) - Xử lý tập tin 2

Tiếp theo của: Ngu ngơ học làm web (76) - Xử lý tập tin 1
------

Phần 77.       Xử lý tập tin 2


Đây là clip số 77:


Phân quyền tập tin, thư mục.

Có ba đối tượng sử dụng tập tin gồm:

- Owner/User: người tạo ra/người sử dụng

- Group: nhóm người dùng

- Other/Guest: các trường hợp khác/khách

Các quyền trên tập tin:

- Read: đọc tập tin

- Write: ghi tập tin

- Execute: thực thi

Quyền trên tập tin được biểu diễn bằng bộ ba xyz, trong đó,

- x: quyền của owner/user

- y: quyền của group

- z: quyền của other/guest

Giá trị của các quyền được quy định như sau:

- Read: 4

- Write: 2

- Execute: 1

Ví dụ một số giá trị của x, y, hoặc z:

- 7: có toàn quyền, vì 7 = 4 + 2 + 1, nghĩa là 7 = Read + Write + Execute

- 5: có quyền đọc và thực thi, vì 5 = 4 + 1

- 4: chỉ có quyền đọc

- 1: chỉ có quyền thực thi

Ví dụ, một tập tin được phân quyền là 754 có nghĩa gì:

- owner/user có giá trị quyền là 7, nghĩa là toàn quyền, 7 = 4 + 2 + 1

- group có giá trị quyền là 5, nghĩa là có quyền đọc và thực thi, 5 = 4 + 1

- other/guest có giá trị quyền là 4, nghĩa là có quyền đọc

Để tạo thư mục, sử dụng hàm mkdir($path, $mode)

- $path là đường dẫn

- $mode là quyền truy cập thư mục

Ví dụ,

$path = 'test';
  if (file_exists($path) == false) {
    mkdir($path);
  }

Để xóa thư mục, sử dụng hàm rmdir($path),

Ví dụ,

  $path = 'test';
  if (file_exists($path) == true) {
    rmdir($path);
  }

Để xem quyền của thư mục, sử dụng hàm fileperms($dirName).

Để phân quyền thư mục, sử dụng hàm chmod($dirName, $mode).

Ví dụ, (kiểm tra trên hệ điều hành Windows, thấy xuất kết quả không đúng)

  $path = 'test';
  if (file_exists($path) == false) {
    mkdir($path, 0444);
  }
  echo substr(sprintf('%o', fileperms($path)), -4);
  chmod($path, 0111);
  echo substr(sprintf('%o', fileperms($path)), -4);

Lưu ý: quyền trên tập tin/thư mục thường được xuất dưới dạng: aaabbbccc

Trong đó, aaa là quyền của owner/user, bbb là quyền của group và ccc là quyền của other/guest, r là read, w là write, x là execute, - là không có quyền. Ví dụ, -rw-r--r--

Để tạo tập tin, sử dụng hàm file_put_contents($path, $data). Ví dụ,

  $path = 'test/test.txt';
  if (file_exists($path) == false) {
    file_put_contents($path, 'testing');
  }

Để xóa tập tin, sử dụng hàm unlink($path). Ví dụ,

  $path = 'test/test.txt';
  if (file_exists($path) == true) {
    unlink($path);
  }

Để xem quyền tập tin, sử dụng hàm fileperms($fileName).

Để phân quyền tập tin, sử dụng hàm chmod($fileName, $mode).

Đây là clip số 78:


Để lấy danh sách các tập tin và thư mục sử dụng hàm glob($pattern).

Ví dụ,

$array = glob('test/*');
  echo '<pre>';
  print_r($array);
  echo '</pre>';

Lấy các thư mục/tập tin kết thúc là ‘exe’: $array = glob('test/*exe');

Chỉ lấy các thư mục: $array = glob('test/*', GLOB_ONLYDIR);

Hàm parse_ini_file(): lấy thông tin của tập tin cấu hình .ini đưa vào một mảng.

Ví dụ,

[test.ini]

;info
[info]
name=Nguyen Van Teo
age=30
;study
[study]
programming=PHP
class=basic

[PHP]

  $array = parse_ini_file('test.ini');
  echo '<pre>';
  print_r($array);
  echo '</pre>';

Một cách đọc .ini khác,

$array = parse_ini_file('test.ini', TRUE);
  echo '<pre>';
  print_r($array);
  echo '</pre>';

Đây là clip số 79:


Một số khái niệm liên quan đến thư mục, đường dẫn:

- / (root) thư mục gốc

- parent-directory: thư mục cha

- working-directory: thư mục hiện hành

- path: đường dẫn, gồm hai loại: đường dẫn tuyệt đối và đường dẫn tương đối

- đường dẫn tuyệt đối: luôn bắt đầu từ / (root)

- đường dẫn tương đối: tính từ thư mục hiện hành, dấu ‘..’ sẽ nhảy lên thư mục cha của thư mục hiện hành, dấu ‘.’ là thư mục hiện hành.

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

- getcwd(): lấy thư mục hiện hành

- readpath($path): trả về đường dẫn tuyệt đối của $path, ví dụ:

  $path = '';
  echo realpath($path);

hoặc

  $path = 'test\du_lieu.txt';
  echo realpath($path);

Kết quả là: D:\WEBROOT\project1\test\du_lieu.txt

- chdir($newPath): thay đổi thư mục hiện hành thành $newPath, ví dụ:

  $currPath = getcwd();
  echo $currPath;
  chdir('test');
  $currPath = getcwd();
  echo $currPath;

- dir(): mở và thao tác với thư mục, ví dụ,

$dir = dir('test');
  while (($file = $dir->read()) != false) {
    echo 'Tên tập tin: ' . $file . '<br>';
  }

- dấu ‘.’ là làm việc với thư mục hiện tại, dấu ‘..’ làm việc với thư mục cha của thư mục hiện tại, ví dụ,

  $dir = dir('.');
  while (($file = $dir->read()) != false) {
    echo 'Tên tập tin: ' . $file . '<br>';
  }
  echo '-----------<br>';
  $dir = dir('..');
  while (($file = $dir->read()) != false) {
    echo 'Tên tập tin: ' . $file . '<br>';
  }

Đây là clip số 80:


- opendir(): mở và thao tác với thư mục, closedir(): đóng thư mục, ví dụ,

  $dir = opendir('test');
  while (($file = readdir($dir)) != false) {
    echo 'Tên tập tin: ' . $file . '<br>';
  }
closedir();

- scandir() đọc thư mục, ví dụ:

  $path = 'test';
  $arr = scandir($path);
  echo '<pre>';
  print_r($arr);
  echo '</pre>';

Ví dụ, đọc và hiển thị các thư mục có tên thỏa điều kiện cho trước (tên có chứa kí tự ‘eu’):

  $data = glob('test/*eu',GLOB_ONLYDIR);
  echo '<pre>';
  print_r($data);
  echo '</pre>';

Hoặc cách viết khác,

  $result = array();
  $data = scandir('test');
  foreach ($data as $key => $value) {
    if (is_dir('test/'.$value)) {
      if (preg_match('/eu$/ismU', $value)) {
        $result[] = $value;
      }
    }
  }
  echo '<pre>';
  print_r($result);

  echo '</pre>';
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web