یک اسکریپت PHP بنویسید که یک فایل روی سرور را برای دانلود به مرورگر بفرستد و قبل از ارسال هدرها هر خروجی بافر شده را با ob_end_clean() پاک کند.
3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:15 0.0
برای حل این مسئله از توابع هدر HTTP و توابع I/O استفاده کنید: قبل از ارسال headerها با ob_end_clean() بافر خروجی را پاک کنید، سپس هدرهایی مثل Content-Type، Content-Length و Content-Disposition را تنظیم کنید و در نهایت با readfile() یا fopen/fpassthru محتوای فایل را میفرستید و با exit() پایان میدهید. این کار در زمینه Web Development و I/O & Files قرار میگیرد و کمک میکند فایلها بدون اضافه شدن خروجی غیرمنتظره دانلود شوند. نکات: مطمئن شوید هیچ خروجی قبل از header ارسال نشده، در صورت نیاز با while(ob_get_level()) ob_end_clean() همه سطوح بافر را پاک کنید، اندازه فایل را با filesize() بگیرید و برای فایلهای بزرگ از فلوشیفت خواندن به صورت chunk استفاده کنید تا مصرف حافظه کاهش یابد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای اطمینان از اینکه هیچ خروجی با بافر قبل از ارسال header وجود ندارد، ابتدا حلقه while (ob_get_level()) ob_end_clean(); را اجرا کن تا همه بافرها پاک شوند. سپس headerها را مانند Content-Type، Content-Length و Content-Disposition تنظیم کن و مطمئن شو هیچ خروجی قبلاً ارسال نشده است. برای فایلهای بزرگ از readfile یا fread/fpassthru در بازههای کوچک استفاده کن تا مصرف حافظه کاهش یابد و از filesize() برای بهدست آوردن اندازه فایل بهره بگیر. در پایان با exit() پایان بده تا هیچ خروجی غیرمنتظرهای پس از ارسال فایل منتشر نشود.
گزارش