ساخت سیستم مدیریت آپلود فایل با PHP
آپلود فایل یکی از قابلیتهای اساسی در بسیاری از وبسایتها و برنامههای تحت وب است. این قابلیت به کاربران اجازه میدهد تا فایلهای مختلفی مانند تصاویر، اسناد، ویدیوها و غیره را بر روی سرور بارگذاری کنند. در این مقاله، به بررسی نحوه ساخت یک سیستم مدیریت آپلود فایل با استفاده از PHP خواهیم پرداخت. این سیستم شامل امکانات آپلود فایل، نمایش لیست فایلها، حذف فایلها و بررسی نوع فایل خواهد بود.
پیشنیازها
برای شروع، به موارد زیر نیاز دارید:
- یک سرور وب با PHP فعال (مانند Apache یا Nginx)
- یک پایگاه داده (مانند MySQL یا PostgreSQL)
- دانش پایه PHP و HTML
طراحی پایگاه داده
برای ذخیره اطلاعات مربوط به فایلهای آپلود شده، یک جدول در پایگاه داده ایجاد میکنیم. این جدول شامل ستونهای زیر خواهد بود:
id: شناسه یکتا برای هر فایل (کلید اصلی)filename: نام فایل اصلیfilepath: مسیر فایل بر روی سرورfiletype: نوع فایل (مثلاً image/jpeg، application/pdf)filesize: اندازه فایل به بایتupload_date: تاریخ آپلود فایل
نمونه دستور SQL برای ایجاد جدول:
CREATE TABLE files (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
filepath VARCHAR(255) NOT NULL,
filetype VARCHAR(255) NOT NULL,
filesize BIGINT NOT NULL,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
کد PHP برای آپلود فایل
در این بخش، کد PHP برای آپلود فایل را بررسی میکنیم. این کد شامل مراحل زیر است:
- بررسی اینکه آیا فرم آپلود فایل ارسال شده است.
- بررسی اینکه آیا فایل انتخاب شده است.
- بررسی نوع فایل و اندازه آن.
- تولید یک نام فایل یکتا.
- ذخیره فایل در مسیر مشخص شده بر روی سرور.
- ذخیره اطلاعات فایل در پایگاه داده.
کد PHP:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_FILES["fileToUpload"])) {
$file = $_FILES["fileToUpload"];
$filename = $file["name"];
$filetype = $file["type"];
$filesize = $file["size"];
$tmpname = $file["tmp_name"];
// بررسی نوع فایل
$allowed_types = array("image/jpeg", "image/png", "application/pdf", "application/docx");
if (!in_array($filetype, $allowed_types)) {
echo "Error: Only JPEG, PNG, PDF, and DOCX files are allowed.";
exit;
}
// بررسی اندازه فایل (حداکثر 5MB)
if ($filesize > 5000000) {
echo "Error: File size must be less than 5MB.";
exit;
}
// تولید نام فایل یکتا
$unique_filename = uniqid() . "_" . $filename;
$filepath = "uploads/" . $unique_filename;
// انتقال فایل به مسیر مشخص شده
if (move_uploaded_file($tmpname, $filepath)) {
// ذخیره اطلاعات فایل در پایگاه داده
$sql = "INSERT INTO files (filename, filepath, filetype, filesize) VALUES ('$filename', '$filepath', '$filetype', '$filesize')";
if ($conn->query($sql) === TRUE) {
echo "File uploaded successfully.";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
} else {
echo "Error: Could not move uploaded file.";
}
} else {
echo "Error: No file selected.";
}
}
$conn->close();
?>
کد HTML برای فرم آپلود فایل
کد HTML برای فرم آپلود فایل به صورت زیر است:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File">
</form>
کد PHP برای نمایش لیست فایلها
برای نمایش لیست فایلهای آپلود شده، کد PHP زیر را میتوانید استفاده کنید:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, filename, filepath, filetype, filesize, upload_date FROM files";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "| Filename | Filetype | Filesize | Upload Date | Action |
|---|---|---|---|---|
| " . htmlspecialchars($row["filename"]) . " | "; echo "" . htmlspecialchars($row["filetype"]) . " | "; echo "" . number_format($row["filesize"] / 1024, 2) . " KB | "; echo "" . htmlspecialchars($row["upload_date"]) . " | "; echo "Download | Delete | "; echo "
کد PHP برای حذف فایل
برای حذف فایل، کد PHP زیر را میتوانید استفاده کنید:
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if (isset($_GET["id"])) {
$id = $_GET["id"];
// دریافت اطلاعات فایل از پایگاه داده
$sql = "SELECT filepath FROM files WHERE id = $id";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$filepath = $row["filepath"];
// حذف فایل از سرور
if (file_exists($filepath)) {
unlink($filepath);
}
// حذف اطلاعات فایل از پایگاه داده
$sql = "DELETE FROM files WHERE id = $id";
if ($conn->query($sql) === TRUE) {
echo "File deleted successfully.";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
} else {
echo "Error: File not found.";
}
} else {
echo "Error: ID not specified.";
}
$conn->close();
?>
نکات امنیتی
در هنگام ساخت سیستم آپلود فایل، رعایت نکات امنیتی بسیار مهم است. برخی از این نکات عبارتند از:
- بررسی نوع فایل: اطمینان حاصل کنید که فقط فایلهای مجاز آپلود میشوند.
- بررسی اندازه فایل: محدود کردن اندازه فایل آپلود شده از حملات DoS جلوگیری میکند.
- تولید نام فایل یکتا: از تولید نام فایل یکتا برای جلوگیری از بازنویسی فایلهای موجود استفاده کنید.
- ذخیره فایلها در مسیر امن: فایلها را در مسیری خارج از دسترس مستقیم کاربران ذخیره کنید.
- اعتبارسنجی ورودیها: تمام ورودیهای کاربر را اعتبارسنجی کنید تا از حملات تزریق کد جلوگیری کنید.
نتیجهگیری
در این مقاله، به بررسی نحوه ساخت یک سیستم مدیریت آپلود فایل با استفاده از PHP پرداختیم. این سیستم شامل امکانات آپلود فایل، نمایش لیست فایلها، حذف فایلها و بررسی نوع فایل بود. با رعایت نکات امنیتی، میتوانید یک سیستم آپلود فایل امن و کارآمد ایجاد کنید.
