Kiểm tra kích thước tập tin php

Đối với dữ liệu của phần lớn trang web chúng ta đều lưu trữ trong CSDL tuy nhiên cũng có đôi lúc việc lưu trữ dữ liệu với tệp sẽ thuận tiện hơn rất nhiều do dễ dàng thay đổi chẳng hạn như lưu trữ thông tin truy cập CSDL cho

Việc ôm kiến ​​thức về lý tệp và giới hạn quyền của tệp, thư mục (trong Linux) khi học PHP không giúp bạn dễ dàng lưu trữ thông tin cho trang web mà còn giúp bạn tăng tính bảo mật cho các tệp và thư mục

Để biểu diễn cho dấu phân cách trong đường dẫn chúng ta sử dụng dấu \ trên hệ điều hành Windows còn trên Linux chúng ta sử dụng dấu /. Để đơn giản hóa khi biểu diễn ký tự phân cách trong đường dẫn PHP, hãy sử dụng hằng số DIRECTORY_SEPARATOR để biểu diễn

Ví dụ

DEFINE('DS', DIRECTORY_SEPARATOR);
$path = 'www'.DS.'site'.DS.'admin';
//Biểu diễn cho đường dẫn tương đối $path = www/site/admin (trên Linux) và $path = www\site\admin (trên Windows)

Dưới đây là một số hàm thường được sử dụng để xử lý tệp và thư mục trong PHP

  1. is_file($path). return TRUE if $path tồn tại và là một tệp
  2. is_dir($path). return TRUE if $path tồn tại và là một thư mục
  3. file_exists($path). return TRUE if $path tồn tại và là một tệp hoặc thư mục
  4. getcwd(). Returned string icon the current directory at working
  5. scandir($path). Trả về một mảng chứa tệp danh sách và thư mục trong đường dẫn $path nếu $path là tên 1 thư mục tồn tại, nếu không trả về FALSE Chúng ta xem qua một ví dụ đơn giản liệt kê các tệp thống kê và thư mục hiện hành

$path = getcwd();
$items = scandir($path);
//hoặc có thể viết là: $items = scandir('.');
echo "

Content of $path

"
; echo '
    '; foreach ($items as $item) { echo '
  • ' . $item . '
  • '
    ; } echo '
'
; ?>

Đọc tập tin

To read file they ta use fread($file, $length) and to write file they ta use fwrite($file, $data)

Ví dụ


$fp = @fopen('welcome.txt', "r");
   
if (!$fp) {
    echo 'File not found';
}
else
{
$data = fread($fp, filesize('welcome.txt'));
echo $data;
fclose($fp);
}
?>

Trong ví dụ trên tệp chào mừng chúng ta đọc. txt ở chế độ chỉ đọc (r) và để tránh trường hợp xảy ra lỗi khi không tìm thấy tệp mà chúng tôi đặt ký tự @ trước hàm fopen(). Hàm filesize() sẽ trả về toàn bộ kích thước của file cần đọc. Sau khi đọc xong chúng ta đóng lại tệp qua hàm fclose() để xóa bỏ vị trí của con trỏ đang duyệt tệp

Ghi tập tin


$filename = 'test.txt';
$content = "https://viblo.asia\n";
if (is_writable($filename)) {
    if (!$file= fopen($filename, 'a')) {
         echo "Cannot open file ($filename)";
         exit;
    }
    if (fwrite($file, $content) === FALSE) {
        echo "Không thể viết file ($filename)";
        exit;
    }
    echo "Ghi thành công. Đã ghi nội dung ($content) vào file ($filename)";
 
    fclose($file);
} else {
    echo "The file $filename is not writable";
}
?>

Trước khi thực hiện thao tác ghi tệp chúng ta nên kiểm tra tệp có quyền khi hay không bằng cách sử dụng hàm is_writeable($filename)

Upload file Xử lý upload file là công việc mà chúng ta thường xuyên gặp nhất khi làm việc với file và form upload file cũng là nơi để hacker dễ dàng khai thác lỗi khi upload shellscript lên webserver. Vì vậy chúng ta cần kiểm tra kỹ định dạng tệp trước khi di chuyển nó sang thư mục đã được định sẵn trên trang web

Để có thể tải tệp lên được, chúng ta cần có trường nhập liệu với type="file" và trên biểu mẫu tải lên, chúng ta cần chỉ định thuộc tính enctype="multipart/form-data"


   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
       
      $expensions= array("jpeg","jpg","png");
       
      if(in_array($file_ext,$expensions)=== false){
         $errors[]="Chỉ hỗ trợ upload file JPEG hoặc PNG.";
      }
       
      if($file_size > 2097152) {
         $errors[]='Kích thước file không được lớn hơn 2MB';
      }
       
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
       
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
             
         <ul>
            <li>Sent file:  echo $_FILES['image']['name'];  ?>
            <li>File size:  echo $_FILES['image']['size'];  ?>
            <li>File type:  echo $_FILES['image']['type'] ?>
         ul>
             
      form>
       
   body>
html>

Khi người dùng gửi biểu mẫu, tệp sẽ được tải lên thư mục tạm thời của máy chủ web và tên của tệp đã tải lên cũng là tên tạm thời do máy chủ web sinh ra, hãy làm như vậy để chuyển nó đến thư mục được chỉ định trên máy chủ web mà chúng tôi cần