آموزش ساخت سیستم مدیریت آپلود فایل با PHP
در این مقاله، به بررسی گام به گام ساخت یک سیستم مدیریت آپلود فایل با استفاده از زبان PHP خواهیم پرداخت. این سیستم به کاربران امکان میدهد فایلهای خود را بر روی سرور آپلود کرده و آنها را مدیریت کنند. این آموزش برای توسعهدهندگان وب که قصد دارند قابلیت آپلود فایل را به وبسایت یا اپلیکیشن خود اضافه کنند، بسیار مفید خواهد بود.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که پیشنیازهای زیر را دارید:
- یک سرور وب با PHP فعال (مانند Apache یا Nginx)
- یک پایگاه داده (مانند MySQL یا PostgreSQL)
- دانش پایه PHP و HTML
مرحله اول: طراحی پایگاه داده
برای ذخیره اطلاعات مربوط به فایلهای آپلود شده، نیاز به یک پایگاه داده داریم. یک جدول با ساختار زیر ایجاد کنید:
CREATE TABLE files (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
filetype VARCHAR(255) NOT NULL,
filesize INT NOT NULL,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
این جدول شامل فیلدهای زیر است:
- id: شناسه یکتای فایل
- filename: نام فایل
- filetype: نوع فایل (مثلاً image/jpeg, application/pdf)
- filesize: اندازه فایل به بایت
- upload_date: تاریخ و زمان آپلود فایل
مرحله دوم: ایجاد فرم آپلود فایل (HTML)
یک فرم HTML برای آپلود فایل ایجاد کنید. این فرم باید دارای یک فیلد ورودی از نوع file باشد و به یک اسکریپت PHP برای پردازش فایل ارسال شود.
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
نکات مهم:
- enctype=”multipart/form-data”: این ویژگی برای ارسال فایلهای باینری ضروری است.
- name=”fileToUpload”: نام فیلد ورودی فایل باید با نامی که در اسکریپت PHP استفاده میکنید، مطابقت داشته باشد.
مرحله سوم: پردازش آپلود فایل (PHP)
یک اسکریپت PHP به نام upload.php ایجاد کنید تا فایل آپلود شده را پردازش کند. این اسکریپت باید مراحل زیر را انجام دهد:
- اتصال به پایگاه داده: با استفاده از اطلاعات اتصال پایگاه داده، به پایگاه داده متصل شوید.
- بررسی آپلود موفقیتآمیز: بررسی کنید که آیا فایل با موفقیت آپلود شده است یا خیر.
- بررسی نوع فایل: نوع فایل آپلود شده را بررسی کنید و مطمئن شوید که از نوع مجاز است.
- بررسی اندازه فایل: اندازه فایل آپلود شده را بررسی کنید و مطمئن شوید که از حداکثر اندازه مجاز تجاوز نمیکند.
- تعیین مسیر ذخیرهسازی: مسیر ذخیرهسازی فایل را تعیین کنید.
- ذخیره فایل: فایل را در مسیر تعیین شده ذخیره کنید.
- ذخیره اطلاعات فایل در پایگاه داده: اطلاعات مربوط به فایل (نام، نوع، اندازه، تاریخ آپلود) را در جدول files ذخیره کنید.
- نمایش پیام: یک پیام مناسب به کاربر نمایش دهید (مثلاً “فایل با موفقیت آپلود شد” یا “خطا در آپلود فایل”).
کد PHP برای upload.php:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 5000000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"
&& $fileType != "gif" && $fileType != "pdf") {
echo "Sorry, only JPG, JPEG, PNG, GIF & PDF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload the file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$filename = $_FILES["fileToUpload"]["name"];
$filetype = $_FILES["fileToUpload"]["type"];
$filesize = $_FILES["fileToUpload"]["size"];
$sql = "INSERT INTO files (filename, filetype, filesize) VALUES ('$filename', '$filetype', '$filesize')";
if ($conn->query($sql) === TRUE) {
echo "File uploaded successfully and saved to database.";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
} else {
echo "Sorry, there was an error uploading your file.";
}
}
$conn->close();
?>
نکات مهم:
- $target_dir: مسیر پوشهای که فایلها در آن ذخیره میشوند.
- $_FILES[“fileToUpload”]: آرایهای که اطلاعات مربوط به فایل آپلود شده را در خود نگه میدارد.
- move_uploaded_file(): تابعی که فایل را از مکان موقت به مکان نهایی منتقل میکند.
- امنیت: حتماً نوع فایل و اندازه آن را بررسی کنید تا از آپلود فایلهای مخرب جلوگیری کنید.
مرحله چهارم: نمایش لیست فایلها (PHP)
یک اسکریپت PHP دیگر ایجاد کنید تا لیست فایلهای آپلود شده را از پایگاه داده دریافت و نمایش دهد.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, filename, filetype, filesize, upload_date FROM files";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table>";
echo "<tr>ID</th><th>Filename</th><th>Filetype</th><th>Filesize</th><th>Upload Date</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["id"]. "</td>";
echo "<td>" . $row["filename"]. "</td>";
echo "<td>" . $row["filetype"]. "</td>";
echo "<td>" . $row["filesize"]. " bytes</td>";
echo "<td>" . $row["upload_date"]. "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "No files found.";
}
$conn->close();
?>
مرحله پنجم: بهبود امنیت
برای افزایش امنیت سیستم، اقدامات زیر را انجام دهید:
- اعتبارسنجی ورودی: تمام ورودیهای کاربر را اعتبارسنجی کنید تا از حملات تزریقی (SQL injection) جلوگیری کنید.
- محدود کردن نوع فایل: فقط انواع فایلهای مجاز را اجازه دهید.
- محدود کردن اندازه فایل: حداکثر اندازه فایل را محدود کنید.
- تغییر نام فایل: نام فایل آپلود شده را تغییر دهید تا از حملات احتمالی جلوگیری کنید.
- استفاده از توابع امنیتی PHP: از توابع امنیتی PHP مانند hash() برای رمزنگاری اطلاعات حساس استفاده کنید.
این آموزش یک پایه برای ساخت سیستم مدیریت آپلود فایل با PHP ارائه میدهد. شما میتوانید با افزودن قابلیتهای بیشتر مانند مدیریت کاربران، دسترسیهای مختلف، و رابط کاربری جذابتر، این سیستم را بهبود بخشید.
