Bài 30 - PHP basic buổi 9 - QUY TRÌNH UPLOAD FILE TRONG PHP

 

LAB PHP (CB) 9

QUY TRÌNH UPLOAD FILE TRONG PHP

A – LÝ THUYẾT

I – FORM UPLOAD

1 – Gửi thông tin dạng File trong Form

Gửi thông tin dạng File trong một Form chính là hình thức Upload một File dữ liệu (hay nói cách khác là gửi toàn bộ thông tin của File dữ liệu đó đi thông qua Form)

Để có thể thực hiện được việc Upload File đó thành công thông qua Form thì Form của chúng ta phải thỏa mãn 2 điều  kiện sau:

·         Form Upload phải có phương thức truyền File: Method = POST/GET

·         Form Upload phải có phương thức enctype="multipart/form-data"

 

2 – Nhận biến File

Để có thể nhận được các thông tin từ biến File được gửi thông qua Form, chúng ta sử dụng cú pháp sau:

Cú pháp:

$_FILE[“ten_file”][“thuoc_tinh_file”];

a)      ten_file: Chính là giá trị của thuộc tính name trong trường File Upload

b)     thuoc_tinh_file: Chính là các thuộc tính của File Upload như:

c)      name: Tên của File muốn Upload, bao gồm cả thành phần mở rộng của File

d)     tmp_name: Địa chỉ đường dẫn tạm thời của File sau khi được Upload thông qua Form

e)      size: Dung lượng của File

f)       error: Các thông tin về lỗi trong quá trình gửi thông tin của File qua Form

 

III – CÁC LỖI TRONG QUÁ TRÌNH UPLOAD

1 – Khái niệm

Khi Upload một File không thành công, thông thường phải do một lý do nào đó làm ảnh hưởng tới quá trình Upload và chúng ta cần phải biết được những lý do để có thể khắc phục. Đó gọi là các lỗi trong quá trình Upload

 

2 – Ý nghĩa của các lỗi xảy ra trong qua trình Upload File

Trong quá trình chúng ta xử lý Upload có thể xảy ra một số sự cố ngoài ý muốn làm cho việc Upload File, mỗi một sự cố này sẽ được PHP ghi nhận và phân biệt đồng thời trả lại cho biến $_FILE[“file_name”][“error”] một giá trị nguyên trong khoảng từ 0 đến 4. Mỗi một giá trị nguyên này thể hiện một lỗi tương ứng. Chúng ta có các kiểu báo lỗi như sau:

a)      Biến error nhận giá trị bằng 0

Trường hợp này không xảy ra lỗi trong quá trình Upload

b)     Biến error nhận giá trị bằng 1

Trong trường hợp này, quá trình Upload đã không thành công bởi có xuất hiện lỗi do dung lượng File muốn Upload vượt quá dung lượng cho phép Upload

c)      Biến error nhận giá trị bằng 2

Trong trường hợp này, quá trình Upload đã không thành công bởi có xuất hiện lỗi do dung lượng File Upload vượt quá dung lượng cho phép trong file cấu hình của hệ thống

d)     Biến error nhận giá trị bằng 3

Trong trường hợp này, quá trình Upload đã không thành công bởi có xuất hiện lỗi do File Upload chỉ được tải lên một phần mà không được tải hết

e)      Biến error nhận giá trị bằng 4

Trong trường hợp này, quá trình Upload đã không thành công bởi có xuất hiện lỗi do không có File nào được tải lên hoặc File gốc đã bị xóa trong quá trình Upload

III – QUÁ TRÌNH XỬ LÝ UPLOAD

Chính là quá trình chuyển đường dẫn tạm của File vừa được gửi thông qua Form thành thành đường dẫn thành đường dẫn thực xác định

Để làm được việc này chúng ta sử dụng hàm move_uploaded_file(“url_tam”, url_moi)

 

Ví dụ:

Tạo một File form.php với nội dung như sau:



Tạo một File upload.php nằm ngang hàng với File form.php với nội dung như sau:

 

Tạo thư mục upload nằm ngang hàng với 2 File trên để chứa File Upload

Chạy File form.php để thực thi công việc Upload

 

B – BÀI TẬP

I – BÀI TẬP THỰC HÀNH

Bài 1:

Xây dựng ứng dụng cho Phép người dùng lựa chọ file để upload. Chạy file bai_tap_1.php để thấy được hoạt động của hệ thống


II – BÀI TẬP VỀ NHÀ

Bài 2:

Xây dựng ứng dụng cho Phép người dùng lựa chọ file để upload với yêu cầu kiểm tra các lỗi xảy ra trong quá trình upload và xuất ra các thông báo tương ứng cho các lỗi đó nếu quá trình upload sảy ra lỗi. Đồng thời xuất ra thông tin của file nếu upload thành công. Chạy file bai_tap_2. php để thấy được hoạt động của hệ thống

 

Bài 3:

Xây dựng ứng dụng cho phép người dùng upload nhiều file cùng lúc. Chạy file bai_tap_3.php để thấy được yêu cầu thiết kế cũng như cách thức hoạt động của hệ thống


Đáp án:

Bài 1:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bài 1</title>
<style type="text/css">
span#error{
font-family:arial;
font-size:12px;
color:#FF0000;
}
span#success{
font-family:arial;
font-size:12px;
color:#00CC00;
}
</style>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file_upload" />
<input type="submit" name="submit_name" value="Upload File" />
</form>
<?php
if($_POST["submit_name"]){
$file_path = $_FILES["file_upload"]["tmp_name"];
$file_name = $_FILES["file_upload"]["name"];
$new_path = "upload/".$file_name;
if(!move_uploaded_file($file_path, $new_path)){
echo "<span id=\"error\">Upload File không thành công!</span>";
}
else{
echo "<span id=\"success\">Upload File thành công!<span>";
}
}
?>
</body>
</html>

Bài 2:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bài 2</title>
<style type="text/css">
body{
font-family:arial;
font-size:12px;
}
span#error{
color:#FF0000;
}
span#success{
color:#00CC00;
}
</style>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file_upload" />
<input type="submit" name="submit_name" value="Upload File" />
</form>
<?php
if($_POST["submit_name"]){
$file_path = $_FILES["file_upload"]["tmp_name"];
$file_name = $_FILES["file_upload"]["name"];
$file_size = $_FILES["file_upload"]["size"];
$file_type = $_FILES["file_upload"]["type"];
$file_error = $_FILES["file_upload"]["error"];
$report = "";
if($file_error != 0){
switch($file_error){
case 1: $report = "<span id=\"error\">Có lỗi xảy ra, do dung lượng File upload vượt quá dung lượng cho phép!</span>";
break;
case 2: $report = "<span id=\"error\">Có lỗi xảy ra, do dung lượng File upload vượt quá dung lượng cho phép trong file cấu hình hệ thống</span>";
break;
case 3: $report = "<span id=\"error\">Có lỗi xảy ra, do File upload chỉ được tải lên một phần!</span>";
break;
case 4: $report = "<span id=\"error\">Có lỗi xảy ra, do File upload không tồn tại!</span>";
break;
}
}
else{
$new_path = "upload/".$file_name;
if(!move_uploaded_file($file_path, $new_path)){
$report = "<span id=\"error\">Upload File không thành công!</span>";
}
else{
$report = "<span id=\"success\">Upload File thành công!</span>";
}
}
echo $report;
echo "<br>";
echo "Tên File: ".$file_name;
echo "<br>";
echo "Kiểu File: ".$file_type;
echo "<br>";
echo "Dung lượng File: ".$file_size;
}
?>
</body>
</html>

Bài 3:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bài 3</title>
</head>
<body>
<form method="post">
Số File muốn Upload<br>
<input type="text" name="number" />
<input type="submit" name="submit_start" value="Khởi tạo" />
</form>
<?php
$number = $_POST["number"];
if($_POST["submit_start"]){
?>
<hr>
<form method="post" enctype="multipart/form-data" action="upload_bai_tap_3.php">
<?php
for($i=1; $i<=$number;$i++){
echo "<input type=\"file\" name=\"file_upload[]\" /><br>";
}
?>
<input type="hidden" name="total_file_upload" value="<?php echo $number;?>" />
<input type="submit" name="submit_end" value="Upload File" />
</form>
<?php
}
?>
</body>
</html>







No comments:

Post a Comment