یک اسکریپت PHP بنویسید که یک فایل متنی روی سرور را با استفاده از هدرهای مناسب برای دانلود به مرورگر ارسال کند و قبل از ارسال محتوا با ob_clean بافر خروجی را پاک کند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:32

0.0

برای حل این مسئله ابتدا وجود فایل را با file_exists بررسی کنید، سپس هدرهای مناسب مانند Content-Type، Content-Disposition و Content-Length را با تابع header ارسال کنید؛ قبل از خواندن فایل با ob_clean() بافر خروجی را پاک کرده و با flush() محتوای بافر را تخلیه کنید و سپس از readfile یا fpassthru برای ارسال فایل استفاده کنید و در نهایت با exit اسکریپت را خاتمه دهید. نکات مفید: هیچ خروجی (فضای خالی یا echo) قبل از ارسال هدرها تولید نشود، برای فایل‌های بزرگ از خواندن به صورت chunk یا fopen/fpassthru استفاده کنید و نام فایل را برای جلوگیری از حملات مسیر‌دهی پاک‌سازی کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:32
دسته بندی ها: PHP PHP for beginner
sara در 221 روز قبل ساعت 12:55

برای دانلود فایل با هدرهای مناسب، ابتدا وجود فایل را با file_exists بررسی کنید و نام آن را با basename پاک‌سازی کنید تا از حملات مسیریابی جلوگیری شود. قبل از ارسال محتوا حتماً با ob_clean() بافر خروجی را پاک کنید و سپس Content-Type، Content-Disposition و Content-Length را تنظیم کنید. برای ارسال فایل‌های بزرگ از readfile یا fopen/fpassthru و خواندن به صورت chunk استفاده کنید تا مصرف حافظه کنترل شود و پس از پایان با exit() پایان بدهید. هیچ خروجی قبل از ارسال هدرها تولید نشود تا خطاهای header_sent رخ ندهد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری