Kiểm tra PHP nếu tệp được đính kèm

Nhiều lần bạn sẽ cần di chuyển các tệp xung quanh hoặc lưu trữ một số dữ liệu bên trong chúng trong PHP. Trong cả hai trường hợp, việc biết trước tệp có tồn tại hay không có thể giúp chúng tôi tránh một số hành vi không mong muốn

PHP đi kèm với nhiều chức năng để xử lý các loại truy vấn khác nhau liên quan đến tệp. Trong hướng dẫn này, tôi sẽ cung cấp cho bạn tổng quan ngắn gọn về tất cả các chức năng này để bạn có thể chọn một chức năng hoạt động tốt nhất trong trường hợp của mình

Tầm quan trọng của việc kiểm tra xem tệp có tồn tại không

Có rất nhiều tình huống trong đó việc kiểm tra xem tệp có tồn tại hay không trước khi thực hiện bất kỳ điều gì khác có thể quan trọng. Giả sử trang web của bạn cho phép người dùng tải lên các tệp hình ảnh trên máy chủ của bạn để họ có thể truy cập sau này. Công bằng mà nói, luôn có khả năng xảy ra xung đột tên tệp nếu nhiều người dùng đang sử dụng dịch vụ của bạn để tải nhiều tệp lên thường xuyên

Trong những trường hợp như vậy, điều quan trọng là phải kiểm tra xem đã có tệp khác ở vị trí bạn muốn lưu tệp được tải lên gần đây của người dùng chưa. Sau đó, bạn sẽ có tùy chọn thực hiện một số bước như đổi tên tệp thành tên khác hoặc cho người dùng biết rằng tệp tải lên của họ sẽ ghi đè lên tệp hiện có

Hãy xem xét một tình huống khác mà bạn phải thêm dữ liệu vào một tệp trong PHP. Nếu tệp bạn đã tạo để ghi tất cả dữ liệu của mình bị xóa vì lý do nào đó, các chức năng như


11 sẽ chỉ tạo một tệp mới với tên được chỉ định và lưu trữ dữ liệu của bạn bên trong tệp mới tạo. Điều này có thể được mong muốn trong một số trường hợp, nhưng không phải lúc nào cũng vậy. Vì vậy, thật hợp lý khi kiểm tra xem tệp có tồn tại trước hay không nếu bạn đã mong đợi nó ở đó trước khi bạn bắt đầu ghi dữ liệu của mình

Kiểm tra xem tệp có tồn tại trong PHP không

Có ba chức năng khác nhau mà bạn có thể sử dụng để kiểm tra xem một tệp có tồn tại trong PHP hay không

Chức năng đầu tiên là


12. Hàm này chấp nhận một tham số duy nhất là đường dẫn chứa tệp của bạn. Hãy nhớ rằng nó sẽ trả về true cho cả tệp và thư mục hiện có. Điều này có thể hoặc có thể không đủ cho nhu cầu của bạn

Bạn có thể cân nhắc sử dụng hàm


13 nếu muốn chắc chắn rằng đường dẫn mà bạn đã chỉ định trỏ tới tệp chứ không phải thư mục. Tương tự, bạn có thể sử dụng hàm

14 để kiểm tra xem đường dẫn bạn đã chỉ định có tồn tại không và liệu nó có trỏ đến một thư mục không

_______ 4____0

2
3
$name = "squares.txt";
4

0

1

2

3

0

1

2

3

4

5

6

7

8

9

3
2
1
2
2
2
3
2
4
2
5
2
6

3
2
8_______69
3
0

đầu ra

1
______72____6
3
4
3
3
6

Trong ví dụ trên, tôi cố ý đặt tên cho một trong các thư mục là ô vuông. zip để cho thấy rằng điều quan trọng là bạn phải tự kiểm tra thay vì cho rằng tên tệp được cung cấp thực sự là tên tệp hoặc thư mục

Điều quan trọng cần nhớ là cả


13 và

14 sẽ trả về

17 ngay cả đối với các đường dẫn thực sự tồn tại khi thư mục mẹ không có quyền phù hợp

Kiểm tra xem tệp có tồn tại và có thể đọc hoặc ghi được không

Có thể sử dụng thêm hai hàm có tên là


18 và

19 để lấy một số thông tin bổ sung về một tệp, bên cạnh việc kiểm tra xem nó có tồn tại hay không

Đúng như tên gọi, hàm


18 sẽ kiểm tra hai thứ. thứ nhất, tệp hoặc thư mục thực sự tồn tại và thứ hai, tệp có thể đọc được. Tương tự, hàm

19 cũng kiểm tra hai điều, rằng tệp hoặc thư mục tồn tại và có thể ghi được

1
______0
2
3
$name = "squares.txt";
4

1
$name = "squares.txt";
4

2
$name = "squares.txt";
6

0

3

2

4
4
1

5
4
3

7

3

9
2
1
3
0

đầu ra

1
____100
2

02

Tôi khuyên bạn nên cẩn thận khi diễn giải giá trị trả về của hai hàm này. Ví dụ: bản năng đầu tiên của chúng tôi khi


18 trả về false là nghĩ rằng tệp chúng tôi đã truy vấn không thể đọc được. Tuy nhiên hàm cũng trả về false nếu file không tồn tại. Điều quan trọng là luôn ghi nhớ khía cạnh này của các chức năng này

Coi chừng kết quả được lưu trong bộ nhớ cache

Giá trị trả về mà bạn nhận được từ lệnh gọi đến tất cả năm hàm này—cụ thể là,


12,

13,

14,

18 và

27—được lưu vào bộ đệm ẩn. Điều này có nghĩa là các lệnh gọi lặp lại tới một hàm, chẳng hạn như

13, có thể hiển thị cho bạn kết quả cũ

PHP lưu trữ kết quả của các chức năng này để cải thiện hiệu suất. Điều này đảm bảo rằng nhiều cuộc gọi để truy vấn cùng một tệp sẽ hoạt động nhanh hơn. Tuy nhiên, giá trị trả về của chúng sẽ giữ nguyên ngay cả khi tệp thay đổi trong quá trình thực thi tập lệnh

Kết quả chỉ được lưu vào bộ đệm cho các tệp đã tồn tại. Điều này có nghĩa là việc gọi một hàm


13 sẽ tiếp tục trả về

17 cho các tệp không tồn tại nhưng sẽ bắt đầu trả về

31 ngay khi tệp được tạo. Mặt khác, hàm sẽ tiếp tục trả về

31 cho tệp đã tồn tại trong lần gọi đầu tiên, ngay cả sau khi tệp đã bị xóa

1

2
3
$name = "squares.txt";
4

1

6

2

8

0

3

2

4

5

18

7

20

9
2
1

6
2
2

8
2
4

3
2
6
2
8

30
2
9

32

6

34

8

36

37

38

39

00

3

02

03
3
0

Nếu bạn chạy đoạn mã trên cho một tệp thực sự tồn tại và sau đó xóa nó theo cách thủ công trong khi tập lệnh chờ, việc gọi


13 sẽ vẫn trả về

31. Tuy nhiên, bạn có thể nhận được kết quả chính xác bằng cách gọi

35 trước khi truy vấn lại sự tồn tại của tệp

đầu ra

_______4__

3
4
2
3
4
3

10

Một điều khác cần nhớ là lệnh gọi tới


36 sẽ tự động xóa bộ nhớ cache, do đó, bạn sẽ nhận được kết quả mới cho các lệnh gọi tới hàm như

13 sau này

Suy nghĩ cuối cùng

Chúng tôi bắt đầu hướng dẫn này bằng cách tìm hiểu tầm quan trọng của việc kiểm tra sự tồn tại của tệp trong PHP. Sau đó, chúng ta đã tìm hiểu về các chức năng khác nhau mà bạn có thể sử dụng để kiểm tra xem một tệp có tồn tại trong PHP hay không. Chúng tôi cũng đã tìm hiểu về những ưu điểm và nhược điểm mà một số chức năng này có thể có.

Như tôi đã đề cập ở phần cuối, PHP sẽ lưu trữ kết quả của một số lệnh gọi hàm này để cải thiện hiệu suất. Do đó, hãy đảm bảo rằng bạn xóa bộ nhớ cache trước khi thực hiện điều gì đó quan trọng với các tệp đó