Kiểm tra sự tồn tại file ảnh (image)

Hôm nay tôi đã fix 1 lỗi về đường dẫn file ảnh, công việc của tôi là kiểm tra file ảnh đó có tồn tại hay không và nếu không tồn tại thì phải thay bằng một ảnh mặc định nào đó.  Nếu là bạn, bạn sẽ dùng hàm gì ? Tôi nghĩ sẽ có nhiều người nghĩ ngay đến hàm file_exists() đã khá quen thuộc.  Nhưng khi tôi thử áp dụng thì nó lại cho kết quả không đúng mặc dù file ảnh mà tôi kiểm tra là có thực. Sau một hồi tìm kiếm, tôi đã có câu trả lời, đó là trong trường hợp này hàm  file_exists() sẽ kiểm tra thư mục của file ảnh, do đó nó sẽ luôn trả về false. Đồng thời tôi cũng tìm được giải pháp cho vấn đề trên, đó là hàm getimagesize() .

Tại sao là hàm getimagesize() ?

Hàm này sẽ trả về kích thước của một file ảnh bất kì, kết quả được chứa trong một mảng (array) với 7 phần tử. Nói cách khác là nếu hàm này trả về array thì file ảnh đó là có thực. (Không có ảnh thì lấy đâu ra kích thước ^^)

Để hiểu hơn, các bạn có thể xem ví dụ dưới đây

<?php
  $file_path = 'http://tanviet.speedymirror.com/wp-content/uploads/2011/07/border_radius.jpg' ;

  // Ham file_exists()
  if (file_exists($file_path)) {
    echo "This file exists!";
  } else {
    echo "This file does not exist";
  }

  // Ham getimagesize() cho ket qua chinh xac hon
  $url = getimagesize($file_path);
  if (is_array($url)) {
    echo "<br />This file exists!";
  } else {
    echo "<br />This file does not exist!";
  }
?>

Kết quả

This file does not exist
This file exists!

Kết luận,

Qua kết quả nhận được có thể nhận thấy sự khác nhau khi sử dụng hàm file_exists()getimagesize(), từ đó bạn có thể áp dụng cho nhiều trường hợp khác. Tôi hi vọng bài viết này sẽ giúp ích phần nào cho công việc lập trình của các bạn.

 

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like...

10 Responses

  1. Đức Tân says:

    getimagesize() vẫn ko ổn, vì nếu file hình ảnh ko tồn tại thì sẽ ko chạy đc getimagesize() thì lấy đâu ra kết quả để thay 😀

    • Tấn Việt says:

      Chào bạn,

      Bài viết của mình là dùng hàm getgetimagesize() để kiểm tra file ảnh đó có tồn tại hay không, thay vì dùng hàm file_exists() đôi khi sẽ không cho kết quả chính xác.

  2. dat12012 says:

    $img = $_FILES[‘image’][‘name’];
    if(strlen($img)>4){ //ex: .jpg,.png…
    echo ‘file anh ton tai’;
    }

  3. hưng trần says:

    Chào bạn,
    Bạn có thể giải thích rõ hơn về cơ chế hoạt động của hàm file_exists được ko? Mình cần đọc 1 file qua mạng LAN, đường dẫn truyền vào đúng: \\192.168.0.200\received\test.txt
    vậy mà vẫn báo file ko tồn tại.
    Mình đã share và cấp full control đầy đủ ở 2 tab.
    Mình đã thử cho url truyền vào trên trình duyệt hoặc windows expoler thì vẫn lấy được file đó về, trong khi hàm file_exists vẫn báo ko tồn tại file đó, vấn đề của mình là gì? Rất mong ý kiến đóng góp của bạn. Cảm ơn nhiều!

    • Phúc says:

      Hôm nay tình cờ xem đượcbài này thật là hay! thank chủ toppic
      sẳn đây trả lời cho bạn “hưng trần”.
      đây là hàm php vì vậy để thực thi được phải chạy trên trình duyệt với port 80.
      Còn mạng LAN của bạn (\\192.168.0.200\received\test.txt) thì không được rùi.
      ít nhất ban phải cài webserver o máy \\192.168.0.200 và share thư mục có chứ file test.txt thành một
      thư mục con(alias) trong thư mục gốc của web server thì mới thấy được. chúc bạn thành công

  4. vantaiit says:

    Thank bạn !
    Nhưng bạn ơi mình bị lỗi ở hàm getimageresize
    A PHP Error was encountered
    Severity: Warning
    Message: getimagesize(http://www.cantrongluong.com/image/cache/data/Sản%20phẩm/555thumb.php-500x500d-500×339.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found……
    như vậy là sao bạn

    • Phúc says:

      Tui đã test và thấy ok rồi. Lổi [function.getimagesize]: failed to open stream
      bắt buộc phải chịu thôi, vì đây là hàm lấy kích thước file mà, file không tồn
      tại thì báo lổi là điều hiển nhiên.
      Nếu bạn kiểm tra file tồn tại mà file trên host của mình thì dùng hàm file_exists()
      là tốt nhất.
      Nhưng còn trên host khác thì phải dùng như chủ toppic thui.
      Nếu bạn không nuốn thấy lổi xuất hiện thì ban có thể dùng form submit địa chỉ
      hình ảnh đến file xuly, xong bạn trả kết quả về thì sẻ không thấy lổi. vì lổi nằm ở file xử lý rồi. chúc bạn thành công!

  5. mua acc lmht says:

    Em đã áp dụng thành công trên web shop của em
    Nhưng em dùng đường dẫn tương đối thì hàm getimagesize() không hoạt động có bác nào chỉ em với ạ, hay bắt buộc phải dùng đường dẫn tuyệt đối ạ

  6. Kid says:

    Kiến thức không đủ, không đúng thì không nên suy luận và càng không nên đi share, như thế sẽ dẫn đến việc những người đọc được cũng sẽ hiểu sai và làm sai.
    File path phải là một đường dẫn vật lý trên ổ đĩa chứ không phải là 1 đường dẫn web.

Leave a Reply

Your email address will not be published. Required fields are marked *