یک اسکریپت PHP بنویسید که یک فایل متنی روی سرور را با استفاده از stream_eof بهصورت استریم خوانده و با تنظیم هدرهای مناسب (Content-Type و Content-Disposition و در صورت امکان Content-Length) آن را برای دانلود به مرورگر ارسال کند.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:42 0.0
برای حل این مسئله ابتدا بررسی کنید فایل وجود دارد و طول آن را (با filesize) بدست آورید، سپس هدرهای مربوط به نوع محتوا و نحوه دانلود را با header() قبل از خروجی ارسال کنید. فایل را با fopen باز کرده و در یک حلقه while تا زمانی که stream_eof($fp) بازگرداند false با fread در قطعات (مثلاً 8192 بایت) بخوانید و با echo و flush() به مرورگر ارسال کنید؛ سپس فایل را ببندید. اگر خروجی با بافر همراه است، قبل از ارسال دادهها از ob_get_level و ob_end_clean یا ob_clean استفاده کنید تا بافرهای قبلی جلوی ارسال بایتها را نگیرند؛ همچنین رسیدگی به خطاها (عدم وجود فایل یا دسترسی) را فراموش نکنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای بهبود کارایی و تجربه دانلود، فایل را قبل از خروجی بررسی کنید (وجود و طول آن با filesize) و Content-Length را ارسال کنید. Content-Type را متناسب با نوع فایل تنظیم کرده و از Content-Disposition: attachment; filename=... برای دانلود مستقیم استفاده کنید. در فرایند استریم از حلقه fread با اندازه بلوک 8192 بایت استفاده کنید و با echo و flush ارسال را انجام دهید و در صورت وجود بافرها را با ob_clean یا ob_end_clean پاکسازی کنید. در نهایت خطاها مانند عدم وجود فایل یا دسترسی نداشتن را بهصورت مناسب مدیریت کنید و کاربر را بهدرستی مطلع کنید.
گزارش