-----
Phần 84.
Bài tập upload tập tin
Đây là clip số 94:
Tạo ứng dụng upload tập tin, với các yêu cầu:
- Chỉ cho upload các tập tin có kích thước từ 100 KB tới 5MB
- Chỉ cho upload các tập tin có phần mở rộng là: jpg, png,
zip, mp3
- Đọc tập tin cấu hình config.ini để lấy các giá trị cần
thiết
[index.php]
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="UTF-8">
<title>PHP</title>
</head>
<body>
<?php
require_once
'functions.php';
$error = '';
$configs =
parse_ini_file('config.ini');
if
(isset($_FILES['fileUpload'])) {
$fileUpload =
$_FILES['fileUpload'];
$flagSize =
checkFileSize($fileUpload['size'], $configs['min_size'], $configs['max_size']);
$flagExt =
checkFileExtension($fileUpload['name'], explode('|', $configs['extension']));
if ($fileUpload['name']
!= null && $flagSize && $flagExt) {
$fileNameTmp =
$fileUpload['tmp_name'];
$random =
randomString(5);
$destination =
'./files/' . $random . '_' . $fileUpload['name'];
if
(move_uploaded_file($fileNameTmp, $destination)) {
echo 'upload
succeeded!';
} else {
echo 'upload
failed!';
}
}
if ($flagSize == false)
{
$error = 'Upload
không thành công, vui lòng upload tập tin từ 100KB tới 5MB và có phần mở rộng
là jpg, png, zip, mp3';
}
if ($flagExt == false)
{
$error = 'Upload không
thành công, vui lòng upload tập tin từ 100KB tới 5MB và có phần mở rộng là jpg,
png, zip, mp3';
}
}
?>
<form
action="#" method="post"
enctype="multipart/form-data">
<input
type="file" name="fileUpload">
<input
type="submit" value="Submit">
<?php
echo '<p
style="color:red">' . $error . '</p>';
?>
</form>
</body>
</html>
[functions.php]
<?php
// check file size
function
checkFileSize($size, $min, $max) {
$flag = false;
if ($size >= $min
&& $size <= $max) { $flag = true; }
return $flag;
}
// check file extension
function
checkFileExtension($fileName, $arrExtension) {
$ext = pathinfo($fileName,
PATHINFO_EXTENSION);
$flag = false;
if
(in_array(strtolower($ext), $arrExtension) == true) { $flag = true; }
return $flag;
}
// tạo tên tập tin ngẫu
nhiên
function
randomString($length = 5) {
// tạo ra một mảng gồm
các kí tự AZaz09
$arrChar =
array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9'));
// chuyển mảng thành
chuỗi
$chars =
implode($arrChar, '');
// đảo chuỗi ngẫu nhiên
$chars =
str_shuffle($chars);
$result =
substr($chars, 0, 5);
return $result;
}
?>
[config.ini]
; Extension
extension = "jpg|png|mp3|zip"
; Size
min_size = 102400
max_size = 5242880
Đây là clip số 95:
Tải lên server nhiều tập tin với các yêu cầu:
- Chỉ cho tải lên các tập tin có kích thước từ 100 KB tới
5MB
- Chỉ cho tải lên các tập tin có phần mở rộng là: jpg, png,
zip, mp3
- Đọc tập tin cấu hình config.ini để lấy các giá trị cần
thiết
Thay đổi trong [index.php] như sau:
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="UTF-8">
<title>PHP</title>
</head>
<body>
<?php
require_once
'functions.php';
$configs =
parse_ini_file('config.ini');
if
(isset($_FILES['fileUpload'])) {
$fileUpload =
$_FILES['fileUpload'];
foreach
($fileUpload['name'] as $key => $value) {
$flagSize =
checkFileSize($fileUpload['size'][$key], $configs['min_size'],
$configs['max_size']);
$flagExt =
checkFileExtension($fileUpload['name'][$key], explode('|',
$configs['extension']));
if
($fileUpload['name'] != null && $flagSize && $flagExt) {
$fileNameTmp =
$fileUpload['tmp_name'][$key];
$random =
randomString(5);
$destination =
'./files/' . $random . '_' . $fileUpload['name'][$key];
if
(move_uploaded_file($fileNameTmp, $destination)) {
echo 'upload
succeeded!';
} else {
echo 'upload failed!';
}
}
}
}
?>
<form
action="#" method="post"
enctype="multipart/form-data">
<input
type="file" name="fileUpload[]">
<input
type="file" name="fileUpload[]">
<input
type="file" name="fileUpload[]">
<input
type="submit" value="Submit">
</form>
</body>
</html>
Có thể sử dụng thuộc tính “multiple” của input[type=“file”]
để cho phép nhập nhiều tập tin cho một input, tuy nhiên cần cân nhắc vì không
phải mọi trình duyệt đều hỗ trợ.
<form action="#" method="post"
enctype="multipart/form-data">
<input
type="file" name="fileUpload[]" multiple>
<input
type="submit" value="Submit">
</form>
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm: