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