|
|
|
php ขอโค้ตอัพโหลดไฟล์ ที่ต้องอัพโหลดหลายไฟล์หน่อยได้ไหมคะ |
|
|
|
|
|
|
|
Code (PHP)
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="name" value="someFormValue">
<input type="file" name="image">
<button type="submit">Upload</button>
</form>
Max file size: <?php echo ini_get('upload_max_filesize') . '<br>'; ?>
Code (PHP)
<?php
/**
* @link https://www.php.net/manual/en/features.file-upload.post-method.php $_FILES array reference.
* @link https://www.php.net/manual/en/features.file-upload.errors.php $_FILES error reference.
* @link https://www.php.net/manual/en/function.finfo-file.php Finfo (file info) reference.
* @link https://www.php.net/manual/en/function.filesize.php File size function reference.
* @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types Mime types reference.
*/
if ($_POST) {
// if method post.
$data['name'] = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);// ตย.สมมุติกรณีมีฟอร์มฟิลด์อื่นๆมาด้วย.
// กำหนดตัวแปรสำหรับใช้ตรวจ error ก่อนทำอื่นๆ
$errorFound = false;
if (isset($_FILES['image'])) {
// ถ้ามีการ upload.
if (
isset($_FILES['image']['error']) &&
$_FILES['image']['error'] !== UPLOAD_ERR_OK &&
$_FILES['image']['error'] !== UPLOAD_ERR_NO_FILE// ถ้าไม่บังคับ upload ก็เอาไว้ ถ้าบังคับก็เอาออก
) {
// ถ้ามี upload error.
switch ($_FILES['image']['error']) {
case UPLOAD_ERR_INI_SIZE:
$errorMessage = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
break;
case UPLOAD_ERR_FORM_SIZE:
$errorMessage = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
break;
case UPLOAD_ERR_PARTIAL:
$errorMessage = "The uploaded file was only partially uploaded";
break;
case UPLOAD_ERR_NO_FILE:
$errorMessage = "No file was uploaded";
break;
case UPLOAD_ERR_NO_TMP_DIR:
$errorMessage = "Missing a temporary folder";
break;
case UPLOAD_ERR_CANT_WRITE:
$errorMessage = "Failed to write file to disk";
break;
case UPLOAD_ERR_EXTENSION:
$errorMessage = "File upload stopped by extension";
break;
default:
$errorMessage = "Unknown upload error";
break;
}
$errorFound = true;
} elseif ($_FILES['image']['error'] === UPLOAD_ERR_OK) {
// ถ้าไม่มี upload error.
// ดึงข้อมูลไฟล์จากของจริง เพื่อใช้ตรวจสอบ ไม่ใช่เอาจาก $_FILES ซึ่งอาจถูกปลอมได้.
$Finfo = new finfo();
$fileMime = $Finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME_TYPE);// xxxx/xxxx
$fileSize = filesize($_FILES['image']['tmp_name']);// in bytes
$allowedMimes = ['image/gif', 'image/jpeg', 'image/png'];// gif, jpg, jpeg, png.
unset($Finfo);
if ($fileSize > 1024000) {
$errorFound = true;
$errorMessage = 'ขนาดไฟล์ใหญ่เกินกว่า 1 MB.';
} elseif (!in_array(strtolower($fileMime), $allowedMimes)) {
$errorFound = true;
$errorMessage = 'กรุณา upload รูปภาพเท่านั้น.';
} else {
// ผ่านเงื่อนไขการตรวจหมดแล้ว, move upload ได้เลย.
$expUploadFile = explode('.', $_FILES['image']['name']);
$fileExt = '.' . $expUploadFile[count($expUploadFile) - 1];
unset($expUploadFile);
// กำหนดชื่อไฟล์ใหม่ จะใส่ path ไปตรงไหนก็กำหนดตรงนี้
$newUploadFileName = md5(time()) . $fileExt;
unset($fileExt);
$uploadResult = move_uploaded_file($_FILES['image']['tmp_name'], $newUploadFileName);
if ($uploadResult !== true) {
$errorFound = true;
$errorMessage = 'ไม่สามารถอัพโหลดได้.';// จะมี warning ให้เปิดแสดง error.
}
unset($uploadResult);
}
unset($allowedMimes, $Finfo, $fileMime, $fileSize);
}// endif; ตรวจ upload error.
}// endif; ถ้ามีการ upload.
if ($errorFound === false) {
// ถ้าผ่านการตรวจแล้ว ไม่มี error
// ทำอย่างอื่น เช่น insert, update DB.
if (isset($newUploadFileName)) {
// ถ้ามีการ upload ด้วย กำหนดค่าเพิ่มเติม.
$data['image'] = $newUploadFileName;
unset($newUploadFileName);
// ทดลองเฉยๆ upload ได้แล้วก็ลบทิ้ง.
unlink($data['image']);
}
// INSERT/UPDATE DB, move uploaded file ก็ตรงนี้
print_r($data);// for debug only.
} else {
// ถ้าผ่านการตรวจแต่มี error
if (isset($errorMessage)) {
// ถ้ามีข้อความ error.
// จะแสดงธรรมดา (echo) ก็ได้, trigger error ก็ได้, หรือจะใช้ throw exception ก็ได้.
trigger_error($errorMessage, E_USER_ERROR);
}
exit();// หยุดทำงาน หรือจะไม่หยุด แล้วแต่.
}
}
|
|
|
|
|
Date :
2020-10-09 19:51:16 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|