یک اسکریپت PHP بنویسید که به یک سرور FTP متصل شود، اندازهٔ یک فایل مشخص را با ftp_size بدست آورد و هنگام ارسال فایل برای دانلود هدر HTTP مناسب از جمله Content-Length را تنظیم کند.
17.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 03:43 0.0
برای حل این مسئله از توابع PHP مانند ftp_connect و ftp_login برای اتصال به FTP و از ftp_size برای گرفتن اندازهٔ فایل استفاده کنید (مقدار -1 یعنی اندازه قابل تعیین نیست). سپس با header('Content-Type: application/octet-stream') و header('Content-Length: '.$size) و header('Content-Disposition: attachment; filename="name"') هدرهای مناسب را بفرستید و با ftp_fget فایل را مستقیماً به php://output استریم کنید. حتماً پس از اتمام اتصال را ببندید، وضعیت خطا (مثل اندازهٔ -1 یا عدم دسترسی) را کنترل کنید و برای دانلودهای بزرگ set_time_limit(0) را در نظر بگیرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
پیشنهاد میکنم قبل از ارسال هدرها مقدار بازگشتی ftp_size را چک کنید (اگر -1 بود یا دسترسی نداشتید باید بهصورت fallback فایل را استریم کنید یا هدر Content-Length را حذف کنید و از انتقال chunked استفاده کنید). برای دانلودهای بزرگ set_time_limit(0) و فعال کردن ftp_pasv(true) و انتقال در حالت باینری ضروری است، همچنین خروجی بافر را پاک و خاموش کنید تا دادهها بلافاصله به کلاینت فرستاده شوند. برای پشتیبانی از Resume بهتر است هدر Range را پردازش کنید و در صورت نیاز از partial content (206) استفاده کنید. حتماً پس از اتمام ftp_close را فراخوانی و خطاها را لاگ کنید تا ردیابی مشکلات سادهتر شود.
گزارش