یک اسکریپت 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 استفاده کنید تا بافرهای قبلی جلوی ارسال بایت‌ها را نگیرند؛ همچنین رسیدگی به خطاها (عدم وجود فایل یا دسترسی) را فراموش نکنید.

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

برای بهبود کارایی و تجربه دانلود، فایل را قبل از خروجی بررسی کنید (وجود و طول آن با filesize) و Content-Length را ارسال کنید. Content-Type را متناسب با نوع فایل تنظیم کرده و از Content-Disposition: attachment; filename=... برای دانلود مستقیم استفاده کنید. در فرایند استریم از حلقه fread با اندازه بلوک 8192 بایت استفاده کنید و با echo و flush ارسال را انجام دهید و در صورت وجود بافرها را با ob_clean یا ob_end_clean پاکسازی کنید. در نهایت خطاها مانند عدم وجود فایل یا دسترسی نداشتن را به‌صورت مناسب مدیریت کنید و کاربر را به‌درستی مطلع کنید.

گزارش

1 پاسخ

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

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