یک اسکریپت PHP بنویسید که یک فایل روی سرور را با توابع stream خوانده، با استفاده از stream_eof() خواندن را به صورت chunked مدیریت کند و با ارسال هدرهای مناسب (مثل Content-Type، Content-Disposition و Content-Length) فایل را برای دانلود به مرورگر ارسال نماید.

10.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:22

0.0

برای حل مسئله از توابع I/O در PHP مانند fopen/fread یا stream_get_contents و تابع stream_eof() برای تشخیص پایان فایل استفاده کنید؛ هدرهای HTTP باید قبل از هر خروجی با header() فرستاده شوند (مثلاً Content-Type و Content-Disposition: attachment; filename="..."). برای صرفه‌جویی در حافظه فایل را به صورت chunked بخوانید و در حلقه while با شرط !stream_eof($fp) مقدارهای خوانده‌شده را echo کرده و با ob_clean()/flush() یا فقط flush() خروجی را ارسال کنید. نکات: مسیر فایل را از نظر امنیتی بررسی کنید، طول فایل را با filesize() یا fstat بدست آورید تا Content-Length صحیح ارسال شود، و از قرار دادن خروجی‌های جانبی قبل از هدرها پرهیز کنید.

توسط پژوهشگر در 201 روز قبل ساعت 03:22
دسته بندی ها: PHP PHP for beginner
sara در 201 روز قبل ساعت 06:39

برای امنیت بیشتر، مسیر فایل را با realpath بررسی کرده و مطمئن شوید فقط به فایل‌های داخل یک دایرکتوری مجاز دسترسی دارید. از خواندن کامل فایل به صورت streamed با استفاده از stream_eof() در یک حلقه و echo کردن chunkها استفاده کنید تا حافظه صرفه‌جویی شود و خروجی با ob_flush() و flush() ارسال گردد. طول فایل را با filesize() یا fstat به دست آورده و Content-Length را دقیقاً در header ارسال کنید و هدرها را قبل از هر خروجی ارسال کنید. همچنین هدرهای Content-Type و Content-Disposition را با filename امن set کنید تا دانلود به مرورگر صحیح انجام شود.

گزارش

1 پاسخ

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

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