یک اسکریپت 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) را در نظر بگیرید.

توسط پژوهشگر در 198 روز قبل ساعت 03:43
دسته بندی ها: PHP PHP for beginner
sara در 198 روز قبل ساعت 03:44

پیشنهاد می‌کنم قبل از ارسال هدرها مقدار بازگشتی ftp_size را چک کنید (اگر -1 بود یا دسترسی نداشتید باید به‌صورت fallback فایل را استریم کنید یا هدر Content-Length را حذف کنید و از انتقال chunked استفاده کنید). برای دانلود‌های بزرگ set_time_limit(0) و فعال کردن ftp_pasv(true) و انتقال در حالت باینری ضروری است، همچنین خروجی بافر را پاک و خاموش کنید تا داده‌ها بلافاصله به کلاینت فرستاده شوند. برای پشتیبانی از Resume بهتر است هدر Range را پردازش کنید و در صورت نیاز از partial content (206) استفاده کنید. حتماً پس از اتمام ftp_close را فراخوانی و خطاها را لاگ کنید تا ردیابی مشکلات ساده‌تر شود.

گزارش

1 پاسخ

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

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