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