Trong bài viết này, tôi sẽ giải thích những điều cơ bản về tải lên tệp trong PHP. Đầu tiên, chúng ta sẽ xem qua các tùy chọn cấu hình PHP cần có để tải lên tệp thành công. Sau đó, chúng tôi sẽ phát triển một ví dụ thực tế về cách tải tệp lên
Định cấu hình cài đặt PHP
Có một vài cài đặt cấu hình PHP mà bạn sẽ muốn kiểm tra trước để tải lên tệp thành công. Trong phần này, chúng ta sẽ xem qua mọi tùy chọn quan trọng liên quan đến tải lên tệp PHP. Các tùy chọn này có thể được cấu hình trong php. tệp ini
Nếu bạn không chắc tìm php của mình ở đâu. ini, bạn có thể sử dụng
; Whether to allow HTTP file uploads.49 để định vị nó. Chỉ cần tạo một tệp PHP trên máy chủ của bạn bằng dòng sau và mở tệp đó từ trình duyệt
1
Đây là đoạn trích từ tệp thiết lập với một số giá trị mặc định hữu ích
1
; Whether to allow HTTP file uploads.
2
file_uploads = On
3
4
; Temporary directory for HTTP uploaded files.
5
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; Whether to allow HTTP file uploads.0
; Whether to allow HTTP file uploads.1
; Whether to allow HTTP file uploads.2
; Whether to allow HTTP file uploads.3
; Whether to allow HTTP file uploads.4
Cài đặt chính
; Whether to allow HTTP file uploads.
50
Giá trị của lệnh
; Whether to allow HTTP file uploads.50 phải được đặt thành
; Whether to allow HTTP file uploads.52 để cho phép tải tệp lên. Giá trị mặc định của chỉ thị này là
; Whether to allow HTTP file uploads.52
; Whether to allow HTTP file uploads.
54
Chỉ thị
; Whether to allow HTTP file uploads.54 cho phép bạn định cấu hình kích thước tối đa của tệp được tải lên. Theo mặc định, nó được đặt thành
; Whether to allow HTTP file uploads.56 [hai megabyte] và bạn có thể ghi đè cài đặt này bằng cách sử dụng. htaccess cũng vậy. Hai megabyte không nhiều lắm theo tiêu chuẩn ngày nay, vì vậy bạn có thể phải tăng dung lượng này lên. Nếu bạn gặp lỗi
; Whether to allow HTTP file uploads.57 khi cố gắng tải tệp lên, bạn cần tăng giá trị này. Nếu bạn làm như vậy, hãy nhớ tăng thêm
; Whether to allow HTTP file uploads.58 [xem bên dưới]
; Whether to allow HTTP file uploads.
59
Đặt một thư mục tạm thời sẽ được sử dụng để lưu trữ các tệp đã tải lên. Trong hầu hết các trường hợp, bạn không cần lo lắng về cài đặt này. Nếu bạn không đặt nó, thư mục tạm thời mặc định của hệ thống sẽ được sử dụng
; Whether to allow HTTP file uploads.
58
Chỉ thị
; Whether to allow HTTP file uploads.58 cho phép bạn định cấu hình kích thước tối đa của dữ liệu POST. Vì các tệp được tải lên bằng yêu cầu POST nên giá trị này phải lớn hơn giá trị bạn đã đặt cho chỉ thị
; Whether to allow HTTP file uploads.54. Ví dụ: nếu
; Whether to allow HTTP file uploads.54 của bạn là
; Whether to allow HTTP file uploads.64 [16 megabyte], thì bạn có thể muốn đặt
; Whether to allow HTTP file uploads.58 thành
; Whether to allow HTTP file uploads.66
; Whether to allow HTTP file uploads.
67
Nó cho phép bạn đặt số lượng tệp tối đa có thể được tải lên cùng một lúc. Giá trị mặc định là
; Whether to allow HTTP file uploads.68, một số tiền hợp lý
; Whether to allow HTTP file uploads.
69
Đó là số giây tối đa mà tập lệnh được phép phân tích cú pháp dữ liệu đầu vào. Bạn nên đặt nó thành một giá trị hợp lý nếu bạn đang xử lý các tệp tải lên lớn.
; Whether to allow HTTP file uploads.70 [60 giây] là một giá trị tốt cho hầu hết các ứng dụng
; Whether to allow HTTP file uploads.
71
Lệnh
; Whether to allow HTTP file uploads.71 cho biết dung lượng bộ nhớ tối đa mà một tập lệnh có thể sử dụng. Nếu đang gặp sự cố khi tải tệp lớn lên, bạn cần đảm bảo rằng giá trị của lệnh này lớn hơn giá trị bạn đã đặt cho lệnh
; Whether to allow HTTP file uploads.58. Giá trị mặc định là
; Whether to allow HTTP file uploads.74 [128 megabyte], vì vậy, trừ khi bạn có một
; Whether to allow HTTP file uploads.58 và
; Whether to allow HTTP file uploads.54 rất lớn, bạn không cần phải lo lắng về điều này
; Whether to allow HTTP file uploads.
77
Đó là số giây tối đa mà tập lệnh được phép chạy. Nếu đang gặp sự cố khi tải tệp lớn lên, bạn có thể cân nhắc tăng giá trị này.
; Whether to allow HTTP file uploads.78 [30 giây] sẽ hoạt động tốt đối với hầu hết các ứng dụng
Bây giờ, hãy xây dựng một ví dụ thực tế để chứng minh tải tệp lên bằng PHP
Tạo biểu mẫu HTML
Khi bạn đã định cấu hình cài đặt PHP, bạn đã sẵn sàng dùng thử khả năng tải lên tệp PHP
Repo GitHub của chúng tôi có một số mã mẫu mà tôi sẽ thảo luận trong suốt bài viết này. Vì vậy, nếu bạn muốn làm theo, hãy tiếp tục và tải xuống từ GitHub
Chúng tôi sẽ tạo hai tệp PHP. mục lục. php và tải lên. php. chỉ mục. mã giữ tệp php chịu trách nhiệm hiển thị biểu mẫu tải tệp lên. Mặt khác, tải lên. tệp php chịu trách nhiệm tải tệp lên máy chủ
Ngoài ra, một tệp sẽ được tải lên trong thư mục uploaded_files, vì vậy bạn cần đảm bảo rằng thư mục này tồn tại và người dùng
; Whether to allow HTTP file uploads.79 có thể ghi
Trong phần này, chúng ta sẽ đi qua các phần chính của chỉ mục. tệp php
Hãy cùng xem chỉ mục. php trên GitHub
1
; Whether to allow HTTP file uploads.6
2
; Whether to allow HTTP file uploads.8
3
20
4
22
5
24
1
26
3
28
4
file_uploads = On0
6
file_uploads = On2
8
file_uploads = On4
9
file_uploads = On6
11
file_uploads = On8
13
30
14
32
16
34
18
36
19
38
; Whether to allow HTTP file uploads.1
40
; Whether to allow HTTP file uploads.3
42
43
44
45
46
47
48
49
; Temporary directory for HTTP uploaded files.0
; Temporary directory for HTTP uploaded files.1
; Temporary directory for HTTP uploaded files.2
; Temporary directory for HTTP uploaded files.3
; Temporary directory for HTTP uploaded files.4
; Temporary directory for HTTP uploaded files.5
Bạn có thể sử dụng CSS sau để làm cho biểu mẫu trông hấp dẫn hơn
1
; Temporary directory for HTTP uploaded files.7
2
; Temporary directory for HTTP uploaded files.9
3
51
4
53
5
55
1
3
58
4
00
6
02
8
55
9
11
07
13
09
14
; Temporary directory for HTTP uploaded files.9
16
13
18
15
19
17
; Whether to allow HTTP file uploads.1
51
; Whether to allow HTTP file uploads.3
21
43
23
45
55
47
48
28
; Temporary directory for HTTP uploaded files.0
30
; Temporary directory for HTTP uploaded files.2
55
; Temporary directory for HTTP uploaded files.4
34
35
36
37
38
39
40
41
42_______
Về cơ bản, CSS ẩn tệp gốc
; Whether to allow HTTP file uploads.80 và tạo kiểu cho các phần tử
; Whether to allow HTTP file uploads.81 và
; Whether to allow HTTP file uploads.82 đi kèm của nó
Mặc dù nó có thể trông giống như một biểu mẫu PHP điển hình, nhưng có một sự khác biệt quan trọng về giá trị của thuộc tính
; Whether to allow HTTP file uploads.83 của thẻ
; Whether to allow HTTP file uploads.84 . Nó cần được đặt thành
; Whether to allow HTTP file uploads.85 vì biểu mẫu chứa trường tệp
Thuộc tính
; Whether to allow HTTP file uploads.83 chỉ định loại mã hóa sẽ được sử dụng khi biểu mẫu được gửi và thuộc tính này nhận một trong ba giá trị sau
; Whether to allow HTTP file uploads.
87. Đây là giá trị mặc định khi bạn không đặt giá trị của thuộc tính; Whether to allow HTTP file uploads.
83 một cách rõ ràng. Trong trường hợp này, các ký tự được mã hóa trước khi gửi đến máy chủ. Nếu không có trường tệp trong biểu mẫu của mình, thì bạn nên sử dụng giá trị này cho thuộc tính; Whether to allow HTTP file uploads.
83; Whether to allow HTTP file uploads.
85. Khi bạn sử dụng giá trị; Whether to allow HTTP file uploads.
85 cho thuộc tính; Whether to allow HTTP file uploads.
83, nó cho phép bạn tải tệp lên bằng phương thức POST. Ngoài ra, nó đảm bảo rằng các ký tự không được mã hóa khi biểu mẫu được gửi; Whether to allow HTTP file uploads.
93. Điều này thường không được sử dụng. Với cài đặt này, dữ liệu được gửi không được mã hóa
Tiếp theo, chúng tôi xuất trường tệp, cho phép bạn chọn tệp từ máy tính của mình
1
80
Ngoài ra, chúng tôi đã hiển thị một thông báo ở đầu biểu mẫu. Thông báo này hiển thị trạng thái của tệp tải lên và nó sẽ được đặt trong một biến phiên theo tải lên. tập lệnh php. Chúng ta sẽ xem xét nhiều hơn về điều này trong phần tiếp theo
1
; Whether to allow HTTP file uploads.6_______5_______
file_uploads = On6_______7_______
file_uploads = On8
47_______0
57_______2
1
34
3
36
Vì vậy, nó tổng hợp chỉ mục. tệp php. Trong phần tiếp theo, chúng ta sẽ xem cách xử lý tệp đã tải lên ở phía máy chủ
Tạo logic tải lên
Trong phần trước, chúng tôi đã tạo biểu mẫu HTML được hiển thị ở phía máy khách và cho phép bạn tải tệp lên từ máy tính của mình. Trong phần này, chúng ta sẽ thấy đối tác phía máy chủ cho phép bạn xử lý tệp đã tải lên
Lấy mã từ tải lên. php trên GitHub. Chúng tôi sẽ đi qua các phần quan trọng của tập tin đó
Trong tải lên. php, chúng tôi đã kiểm tra xem đó có phải là một yêu cầu POST hợp lệ ngay từ đầu hay không
1
96_______5____2_______98
3
55
Trong PHP, khi một tệp được tải lên, biến siêu toàn cầu
; Whether to allow HTTP file uploads.94 được điền với tất cả thông tin về tệp đã tải lên. Nó được khởi tạo dưới dạng một mảng và có thể chứa thông tin sau để tải lên tệp thành công
; Whether to allow HTTP file uploads.
95. Đường dẫn tạm thời nơi tệp được tải lên được lưu trữ trong biến này; Whether to allow HTTP file uploads.
96. Tên thực của tệp được lưu trữ trong biến này; Whether to allow HTTP file uploads.
97. Cho biết kích thước của tệp được tải lên theo byte; Whether to allow HTTP file uploads.
98. Chứa loại mime của tệp đã tải lên; Whether to allow HTTP file uploads.
99. Nếu có lỗi trong khi tải tệp lên, biến này sẽ được điền bằng thông báo lỗi thích hợp. Trong trường hợp tải tệp lên thành công, tệp chứa 0, bạn có thể so sánh giá trị này bằng cách sử dụng hằng số2
00
Sau khi xác thực yêu cầu POST, chúng tôi kiểm tra xem tệp tải lên có thành công không
1
102_______5_______
98
3
55
Bạn có thể thấy rằng biến
; Whether to allow HTTP file uploads.94 là một mảng nhiều chiều, phần tử đầu tiên là tên của trường tệp và phần tử thứ hai chứa thông tin về tệp đã tải lên, như chúng ta vừa thảo luận ở trên
Nếu upload file thành công, chúng ta khởi tạo một vài biến với thông tin về file upload
1
108_______5_______1_______10_______7__________
112
41_______14
51_______16
1
118
3
120
Trong đoạn mã trên, chúng tôi cũng đã tìm ra phần mở rộng của tệp đã tải lên và lưu trữ nó trong biến
202
Vì tệp đã tải lên có thể chứa khoảng trắng và các ký tự đặc biệt khác, tốt hơn hết bạn nên làm sạch tên tệp và đó chính xác là điều chúng tôi đã thực hiện trong đoạn mã sau
1
122
Điều quan trọng là bạn phải hạn chế loại tệp có thể được tải lên một số tiện ích mở rộng nhất định và không cho phép mọi thứ sử dụng biểu mẫu tải lên. Chúng tôi đã làm điều đó bằng cách kiểm tra phần mở rộng của tệp đã tải lên bằng một tập hợp các phần mở rộng mà chúng tôi muốn cho phép tải lên
1
124_______5_______
126_______7__________
98
4
55
Cuối cùng, chúng tôi sử dụng hàm
203 để di chuyển tệp đã tải lên đến vị trí cụ thể mà chúng tôi chọn
1
132
21_______34
3___
136
410_______1_______39
1
141
3
143
4
55
6
147
8_______1_______41_______2_______9_______1_______51_______1_______51_______1
Hàm
203 có hai đối số. Đối số đầu tiên là tên tệp của tệp đã tải lên và đối số thứ hai là đường dẫn đích mà bạn muốn di chuyển tệp
Cuối cùng, chúng tôi chuyển hướng người dùng đến chỉ mục. tệp php. Ngoài ra, chúng tôi đặt thông báo thích hợp trong biến phiên. Thông báo này sẽ được hiển thị cho người dùng sau khi chuyển hướng trong chỉ mục. tệp php
Làm thế nào tất cả hoạt động cùng nhau
Đừng quên tạo thư mục uploaded_files và làm cho nó có thể ghi được bởi người dùng máy chủ web. Tiếp theo, hãy tiếp tục và chạy chỉ mục. php, tệp này sẽ hiển thị biểu mẫu tải tệp lên giống như sau
Nhấp vào nút Duyệt qua —nút này sẽ mở hộp thoại cho phép bạn chọn một tệp từ máy tính của mình. Chọn tệp có một trong các tiện ích mở rộng được cho phép trong tập lệnh của chúng tôi và nhấp vào nút Tải lên
Điều đó sẽ gửi biểu mẫu và nếu mọi thứ suôn sẻ, bạn sẽ thấy tệp đã tải lên trong thư mục tệp_tệp tải lên. Bạn cũng có thể thử tải lên các tệp khác có phần mở rộng không được phép và kiểm tra xem tập lệnh của chúng tôi có ngăn chặn các tệp tải lên đó không
Giải quyết các lỗi thường gặp
Rất nhiều thứ có thể sai trong quá trình tải lên tệp có thể dẫn đến lỗi. Bạn có thể kiểm tra lỗi chính xác đã xảy ra trong quá trình tải lên bằng cách sử dụng
205. Dưới đây là giải thích về những lỗi đó
Tập tin quá lớn
206 và
207 xảy ra khi kích thước của tệp tải lên lớn hơn giá trị được chỉ định trong php. ini hoặc dạng HTML tương ứng. Bạn có thể khắc phục lỗi này bằng cách tăng giới hạn kích thước tải lên hoặc cho người dùng biết trước về chúng
Thư mục tạm thời bị thiếu
208 được báo cáo khi thiếu thư mục tạm thời để tải tệp lên.
209 được báo cáo khi không có tệp nào để tải lên
Tải lên một phần hoặc không thể ghi vào đĩa
Bạn sẽ nhận được
210 nếu tệp chỉ có thể được tải lên một phần và
211 nếu không thể ghi tệp vào đĩa
Tiện ích mở rộng PHP đã dừng tải tệp lên
Đôi khi, bạn sẽ gặp lỗi _______5_______12 vì một số tiện ích mở rộng đã dừng tải tệp lên. Điều này sẽ yêu cầu bạn điều tra thêm để tìm ra tiện ích mở rộng nào gây ra sự cố
Đây là mã đầy đủ từ tải lên. php sẽ hiển thị cho người dùng một thông báo trên trang tải lên trong trường hợp tải lên thành công hay thất bại. Thông tin về thành công hay thất bại của quá trình tải lên được lưu trữ trong
213
1
; Whether to allow HTTP file uploads.6
2
157
3
4
160
5
162
1
141
3
166
4
168
6
170
8
172
9
174
11
176
13
178
14
180
16
182
18
19
185
; Whether to allow HTTP file uploads.1
187
; Whether to allow HTTP file uploads.3
43
190
45
192
47
48
195
; Temporary directory for HTTP uploaded files.0
file_uploads = On8
; Temporary directory for HTTP uploaded files.2
199
; Temporary directory for HTTP uploaded files.4
; Whether to allow HTTP file uploads.01
34
; Whether to allow HTTP file uploads.03
36
38
; Whether to allow HTTP file uploads.06
40
; Whether to allow HTTP file uploads.08
42
; Whether to allow HTTP file uploads.10______
Học PHP với một khóa học trực tuyến miễn phí
Hôm nay, chúng ta đã thảo luận những điều cơ bản về tải lên tệp trong PHP. Trong nửa đầu của bài viết, chúng ta đã thảo luận về các tùy chọn cấu hình khác nhau cần có để tải tệp lên hoạt động. Sau đó, chúng tôi đã xem xét một ví dụ thực tế minh họa cách tải lên tệp hoạt động trong PHP
Nếu bạn muốn tìm hiểu thêm về PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP
Trong khóa học này, bạn sẽ học các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những kiến thức cơ bản, học cách PHP hoạt động và viết các hàm và vòng lặp PHP đơn giản. Sau đó, bạn sẽ xây dựng các lớp mã hóa để lập trình hướng đối tượng đơn giản [OOP]. Đồng thời, bạn sẽ học tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web. bạn sẽ có cơ hội thực hành phản hồi các yêu cầu GET và POST, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL