یک اسکریپت 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 استفاده کنید تا مصرف حافظه کاهش یابد.

توسط پژوهشگر در 220 روز قبل ساعت 02:15
دسته بندی ها: PHP PHP for beginner
arman در 220 روز قبل ساعت 10:22

برای اطمینان از اینکه هیچ خروجی با بافر قبل از ارسال header وجود ندارد، ابتدا حلقه while (ob_get_level()) ob_end_clean(); را اجرا کن تا همه بافرها پاک شوند. سپس headerها را مانند Content-Type، Content-Length و Content-Disposition تنظیم کن و مطمئن شو هیچ خروجی قبلاً ارسال نشده است. برای فایل‌های بزرگ از readfile یا fread/fpassthru در بازه‌های کوچک استفاده کن تا مصرف حافظه کاهش یابد و از filesize() برای به‌دست آوردن اندازه فایل بهره بگیر. در پایان با exit() پایان بده تا هیچ خروجی غیرمنتظره‌ای پس از ارسال فایل منتشر نشود.

گزارش

1 پاسخ

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

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