آپلود فایل (File Upload)
«آپلود فایل PHP» یعنی فرستادن فایل به سرور. کار ساده است؛ اما خطرناک هم هست. پس باید قوانین بگذاریم. اندازه، نوع، و نام فایل را چک می کنیم. سپس فایل را در پوشه امن ذخیره می کنیم.
تنظیمات php.ini برای آپلود فایل PHP
ابتدا مطمئن شو آپلود فعال است. در php.ini گزینه file_uploads باید On باشد. بدون این، آپلود کار نمی کند.
ساخت فرم انتخاب فایل
فرم باید method="post" و enctype="multipart/form-data" داشته باشد. ورودی type="file" می گذارد کاربر فایل انتخاب کند. فرم به upload.php ارسال می شود.
شروع اسکریپت آپلود PHP
ابتدا مسیر هدف، نام فایل، و نوع پسوند را بگیر. سپس با getimagesize() واقعی بودن تصویر را چک کن.
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
نکته: پوشه uploads را کنار upload.php بساز. فایل ها آنجا ذخیره می شوند.
جلوگیری از هم نامی فایل ها
اگر فایل موجود است، آپلود را متوقف کن. این کار از رونویسی جلوگیری می کند.
<?php
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
?>
محدودیت اندازه فایل
برای جلوگیری از پر شدن دیسک، اندازه فایل را محدود کن.
<?php
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
?>
محدودیت نوع فایل
فقط فرمت های امن را بپذیر. پسوند تصویر را بررسی کن.
<?php
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
?>
اسکریپت کامل آپلود فایل
اگر خطا نبود، با move_uploaded_file() فایل موقت را جابه جا کن.
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
هشدار: ورودی کاربر ناامن است. همیشه پسوند و اندازه را چک کن. سپس نام فایل را بی خطر کن.
گام های عملی سریع
- در
php.iniگزینه آپلود را روشن کن. - فرم با
postوmultipart/form-dataبساز. - پوشه
uploadsرا ایجاد و دسترسی را درست کن. - اندازه، نوع، و وجود فایل را بررسی کن.
- با
move_uploaded_file()فایل را جابه جا کن.
جمع بندی سریع
- آپلود فایل PHP ساده اما حساس است.
- فرم باید
postوmultipartباشد. - تصویر واقعی را با
getimagesize()بسنج. - از رونویسی و فایل بزرگ جلوگیری کن.
لینک های داخلی
پس از «آپلود فایل PHP»، بخش ایجاد/نوشتن فایل را ببین. سپس برای مدیریت وضعیت، کوکی ها را مطالعه کن.