بعد از این درس دقیقاً چه بلدی؟
- میتوانی «$_FILES» را با مثال همین درس توضیح بدهی.
- میدانی «MIME واقعی» کجای مسئله به کار میآید.
- تغییر پیشنهادی درس را اجرا میکنی و از روی نتیجه، اشتباه را پیدا میکنی.
تحویل بسته به انبار
انباردار فقط نوشته روی کارتن را باور نمیکند؛ بسته را وزن میکند، نوعش را بررسی میکند و یک شماره داخلی تازه به آن میدهد.
خواندن یک فایل متنی ساده است، اما آپلود فایل از کاربر یک مرز امنیتی مهم است. نوع، اندازه، خطای انتقال و نام ذخیرهشده باید روی سرور کنترل شوند.
چرا مهم است؟ تنها تصویر JPEG یا PNG زیر دو مگابایت را میپذیریم و قبل از انتقال، خطای آپلود و نوع واقعی را میسنجیم.
اولین تمرین تو: تنها تصویر JPEG یا PNG زیر دو مگابایت را میپذیریم و قبل از انتقال، خطای آپلود و نوع واقعی را میسنجیم.
اول بفهم، بعد کد بنویس
$_FILES
اطلاعات فایل آپلودشده، نام موقت، اندازه و کد خطا را نگه میدارد.
MIME واقعی
با finfo محتوای فایل را بررسی میکنیم؛ پسوند و Content-Type ارسالی کاربر قابل اعتماد نیست.
نام تازه
فایل را با نام تصادفی و خارج از مسیر اجرای اسکریپت ذخیره میکنیم.
آپلود تصویر پروفایل
تنها تصویر JPEG یا PNG زیر دو مگابایت را میپذیریم و قبل از انتقال، خطای آپلود و نوع واقعی را میسنجیم.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را کامل کن و ساختار آن را بررسی کن
این درس وارد قابلیتهای سروری یا حرفهای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمیشود؛ بررسیگر، وجود اجزای ضروری و منطق مورد انتظار را کنترل میکند و راهنمای اصلاح میدهد.
کد را کامل کن و «بررسی ساختار» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
$file = $_FILES["avatar"] ?? null;یک مقدار با نام $file نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 3
if (!$file || $file["error"] !== UPLOAD_ERR_OK) {یک پرسش درست/نادرست بررسی میشود و مسیر اجرای بعدی را تعیین میکند.
- 4
exit("آپلود کامل نشد");این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 5
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 6
echo "فایل برای بررسی آماده است";نتیجه این عبارت به خروجی پاسخ فرستاده میشود.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
فرم را بدون فایل بفرست و پیام را ببین. بعد پیام خطا را برای کاربر روشنتر کن، بدون نمایش مسیرهای سرور.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
فرم را بدون فایل بفرست و پیام را ببین. بعد پیام خطا را برای کاربر روشنتر کن، بدون نمایش مسیرهای سرور.
سناریوی «آپلود تصویر پروفایل» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
فقط پسوند .jpg را بررسی میکنی.
نام اصلی فایل را مستقیم برای ذخیره استفاده میکنی.
پوشه آپلود اجازه اجرای PHP دارد.
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
چرا پسوند فایل برای تشخیص نوع کافی نیست؟
کدام توضیح، «$_FILES» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.