Trong bài học này, chúng ta sẽ tìm hiểu về biến siêu toàn cục $_FILES cũng như cách upload filfe trong PHP.
- Video Upload file trong PHP
- Hướng dẫn chi tiết
- Biến siêu toàn cục $_FILES
- Xử lý upload file trong php
Video Upload file trong PHP
Hướng dẫn chi tiết
"Người ta tắt AdsBlock không phải vì người ta dại, mà người ta quý mình nên coi quảng cáo" Hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn
Biến siêu toàn cục $_FILES
Xử lý upload file trong phpname bạn đặt trong file html và value là một mảng gồm 4 phần tử
- $_FILES là một mảng kết hợp của các mục được tải lên thông qua phương thức POST. Trong đó, các file được tải lên sẽ là 1 phần tử trong mảng gồm key là name bạn đặt trong file html và value là một mảng gồm 4 phần tử
- name: tên file
- tmp_name: nơi lưu tạm file, nằm bất cứ đâu trong server và tùy thuộc là thiết lập của bạn.
- error: lỗi xảy ra
Xử lý upload file trong php
$_FILES là một mảng kết hợp của các mục được tải lên thông qua phương thức POST. Trong đó, các file được tải lên sẽ là 1 phần tử trong mảng gồm key là name bạn đặt trong file html và value là một mảng gồm 4 phần tử
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn
tmp_name: nơi lưu tạm file, nằm bất cứ đâu trong server và tùy thuộc là thiết lập của bạn.
error: lỗi xảy ra
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
size: kích thước file, đơn vị là byte.
- Form html của chúng ta như sau:
- Để upload file, chúng ta sẽ dùng hàm move_uploaded_file[$ten_file, $dia_chi_luu_file].
- $ten_file: tên ‘tmp_name’ của file được tải tạm lên server.
$dia_chi_luu_file: nơi lưu trữ file upload mà bạn muốn.
Kiểm tra file trùng
Kiểm tra loại file
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }
Để upload file, chúng ta sẽ dùng hàm move_uploaded_file[$ten_file, $dia_chi_luu_file].
$ten_file: tên ‘tmp_name’ của file được tải tạm lên server.
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }
$ten_file: tên ‘tmp_name’ của file được tải tạm lên server.
$dia_chi_luu_file: nơi lưu trữ file upload mà bạn muốn.‘size’
if [$_FILES["fileToUpload"]["size"] > 500000] { echo "Sorry, your file is too large."; }
Tất nhiên, chỉ đơn giản như thế thì chúng ta đã có thể upload file. Tuy nhiên, chúng ta hay thử áp dụng $_FILES để xử lý phức tạp hơn một chút quá trình tải file lên.
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], $target_file];
Kiểm tra file trùngDownload
Kiểm tra loại filecomment bên dưới, qua email, hoặc nhắn tin qua Fanpage Góc làm web.
Kiểm tra kích thước file
- Tổng quan về kỹ thuật Upload file PHP
- Tạo form HTML file
- Code Php xử lý upload
- Code Php xử lý upload nhiều file
Tổng quan về kỹ thuật Upload file trong PHP
Để HTML FORM có thể gửi file lên server [http server] thì form phải có thuộc tính enctype="multipart/form-data", phần tử trong form để chọn và gửi file có dạng [tức là dùng phần tử
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn6 với thuộc tính
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn7]. Cấu trúc tóm tắt là: enctype="multipart/form-data", phần tử trong form để chọn và gửi file có dạng [tức là dùng phần tử
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn6 với thuộc tính
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn7]. Cấu trúc tóm tắt là:
Khi file Upload lên Server [chạy PHP] thì file sẽ lưu vào một thư mục tạm [temporary directory, như trên Linux đó là /tmp] của hệ thống PHP, và toàn bộ thông tin về file upload sẽ lưu trong biến mảng toàn cục
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn8
Chúng ta cần đọc thông tin từ
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn8 để nhanh chóng di chuyển file được upload vào thư mục tạm vào một nơi lưu trữ lâu dài [nếu không xử lý gì, thì sau một khoảng thời gian file này bị xóa].
Mảng biến
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn8 khi var_dump có cấu trúc dạng như sau:
array [size=1]
'myfile' =>
array [size=5]
'name' => string 'somefile.txt' [length=12]
'type' => string 'text/plain' [length=10]
'tmp_name' => string '/tmp/phpDC66.tmp' [length=16]
'error' => int 0
'size' => int 18
Các thành phần đó là:
- myfile : chỉ số mảng tương ứng với tên phần tử input, upload file. : chỉ số mảng tương ứng với tên phần tử input, upload file.
- name : tên gốc [ban đầu] của file. : tên gốc [ban đầu] của file.
- type : kiểu file [tùy phần mở rộng có thể là
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
1,move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
2,move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
3 ...] : kiểu file [tùy phần mở rộng có thể làmove_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
1,move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
2,move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
3 ...] - tmp_name : nơi lưu tạm file upload lên, nếu muốn di chuyển nó ra khỏi thư mục tạm dùng hàm
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
4. : nơi lưu tạm file upload lên, nếu muốn di chuyển nó ra khỏi thư mục tạm dùng hàmmove_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];
4. - error : mã lỗi, nếu mã này bằng 0 là không lỗi. : mã lỗi, nếu mã này bằng 0 là không lỗi.
- size : cỡ file [byte]. : cỡ file [byte].
Bằng việc đọc
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn8 bạn sẽ biết các thông tin về file được upload, nơi file đang lưu tạm, bạn cần phải xử lý bằng các hàm PHP để di chuyển file ra một vị trí theo cấu trúc thư mục của ứng dụng.
Nếu sau khi upload vào thư mục tạm một thời gian [như trên là
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];6] một thời gian [do cấu hình hệ thống] mà bạn không di chuyển nó đến vị trí thích hợp, nó sẽ tự xóa.
Tạo form HTML upload file
Để thực hành upload file trong PHP, trước tiên tạo
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];7 cho phép người dùng chọn file và gửi file đó lên server. Giả sử code PHP để xử lý upload các file hình ảnh nằm ở
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];8 thì bạn có thể xây dựng
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];7 như sau:
Có thể tạo file
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];0
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn0
Hiện thị
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];7 có dạng:
Lưu ý khi tạo form để uplad ảnh [file] thì cần thiết đặt thuộc tính form có:
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];2 Phần tử chọn file trong form là
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn6 với kiểu
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn7. Tên phần tử là
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];5
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];2
Phần tử chọn file trong form là
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn6 với kiểu
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn7.
Tên phần tử là
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];5
Code PHP xử lý Upload File
Code xử lý upload sau là xử lý chỉ cho upload các file ảnh, với các loại file là jpg, png, jpeg, gif. File Upload file có cỡ < 0.8 MB. File Upload sẽ lưu vào thư mục
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];6
Code xử lý upload file để trong file
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];7 có nội dung như sau:
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn1
Giải thích code trên:
Các
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];8 mà
move_uploaded_file[$_FILES["fileToUpload"]["tmp_name"], 'uploads/'.basename[$_FILES["fileToUpload"]["name"]]];7 HTML upload nên, được PHP lưu ở một thư mục tạm hệ thống, và tất cả các thông tin về file được lưu ở biến mảng
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }0, cấu trúc biến này như sau:
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn2
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }1 tên key tương ứng với tên phần tử form upload file, ví dụ trên là
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];5
Như vậy khi xủ lý upload file, bạn truy cập vào $_FILE và di chuyển file vừa upload từ
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }3 sang vị trí mới bạn muốn lưu
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }4 bằng hàm
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }5
Kiểm tra file upload có phải là file ảnh [dùng cho trường hợp bạn chỉ cho phép up ảnh] thì đầu tiên gọi
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }6 để xem kích thước ảnh, nếu hàm phân tích được có nghĩa là ảnh, ngược lại là một loại file khác.
Kiểm tra phần mở rộng của tên file: Lấy phần mở rộng
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }7 rồi so sánh với các mẫu cho phép.
NHANH CHÓNG CHẠY THỬ CODE TRÊN
Bạn có thể tạo ra một thư mục đặt tên
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }8, để trong đó 2 file
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];0 và
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];7 ở trên, trong thư mục này tạo thư mục con
$target_dir = "uploads/"; $target_file = $target_dir . basename[$_FILES["fileToUpload"]["name"]];6 để lưu file - cấu trúc này như tại đây: uploadfile
Sau đó vào thư mục
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }8 và gõ lệnh chạy Server HTTP của PHP
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn3
Từ trình duyệt truy cập
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }3 để chạy thử
Code PHP Upload nhiều File
Trong thẻ
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }4 nếu có thuộc tính
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }5 và tên phần tử chỉ ra là mảng, thì cho phép chọn một lúc nhiều file để upload.
Ví dụ HTML như sau:
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn4
Lúc này tại PHP
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }6 mỗi thành phần sau đều là mảng chứa số lượng tương ứng của file upload
$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }
7 chứa các tên file upload [up 3 file thì là mảng 3 phần tử các tên]$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }
8 các kiểu file$fileType = strtolower[pathinfo[$target_file,PATHINFO_EXTENSION]]; // Allow certain file formats if[$fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ] { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $upload_ok = 0; }
9 chứa các vị trí lưu tạm fileif [$_FILES["fileToUpload"]["size"] > 500000] { echo "Sorry, your file is too large."; }
0 mảng báo lỗiif [$_FILES["fileToUpload"]["size"] > 500000] { echo "Sorry, your file is too large."; }
1 các kích thước file
Đoạn code sau hiện thị FORM để bạn chọn một lúc nhiều file upload, sau đó code PHP sẽ hiện thị các thông tin về các file mà bạn upload lên. Hãy chạy và chọn thử nhiều file upload để kiểm tra
File
if [$_FILES["fileToUpload"]["size"] > 500000] { echo "Sorry, your file is too large."; }2
"Ra đời, cuộc sống bươm chải, có làm vẫn không có ăn" nên phải gắn QUẢNG CÁO Các bạn cần hosting WordPress nhanh, rẻ và dễ sử dụng có free SLL hãy chọn Azdigi nhé. Link đăng ký: NHẬN NGAY ƯU ĐÃI Nếu các bạn mua hosting từ link trên, mình sẽ có một ít tiền để duy trì. Cảm ơn5
Source code: uploadfile [Git], hoặc tải rphp-uploadfile
Chạy thử bằng cách để file này vào thư mục
if [file_exists[$target_file]] { echo "Sorry, file already exists."; }8 như trên, và truy cập:
if [$_FILES["fileToUpload"]["size"] > 500000] { echo "Sorry, your file is too large."; }4 để kiểm tra