دریافت‌کنندهٔ آپلود قابل‌ادامه EDU — نسخه 1.1.0
این بسته افزونه وردپرس نیست؛ روی هاست دانلودِ دارای PHP 8.0 یا بالاتر نصب می‌شود.

۱) پوشه بسته را در هاست دانلود قرار دهید تا receiver.php از طریق HTTPS در دسترس باشد.
۲) config.example.php را با نام config.php کپی کنید.
۳) یک کلید تصادفی حداقل ۳۲ کاراکتری بسازید؛ نمونه کلید داخل بسته معتبر نیست. همین کلید را در تنظیمات LMS وارد کنید.
۴) storage_dir را به مسیر مطلق پوشه فایل‌های کامل و public_url را به آدرس HTTPS همان پوشه تنظیم کنید.
۵) temporary_dir باید مسیر مطلقِ خارج از public_html / document root و قابل نوشتن توسط PHP باشد. فایل‌های نیمه‌کاره در آن می‌مانند.
۶) در وردپرس: مدیریت آموزشی ← تنظیمات کل ← هاست دانلود. فعال‌سازی هاست و آپلود قابل‌ادامه، Base URL (دقیقاً public_url)، آدرس receiver.php و کلید دریافت‌کننده را وارد و ذخیره کنید. سرویس فهرست JSON قدیمی اختیاری و مستقل است.
۷) در ویرایش دوره ← جلسات، «آپلود قابل‌ادامه» یا «آپلود» کنار فایل پیوست را بزنید. پس از تیک تأیید، جلسه را ذخیره کنید.

هاست باید هدر Authorization را به PHP برساند و بدنه JSON حداقل ۲ مگابایتی را بپذیرد؛ post_max_size پیشنهادی 4M یا بیشتر است. فایل کامل از upload_max_filesize عبور نمی‌کند چون قطعه‌ها یک مگابایتی‌اند. max_execution_time پیشنهادی حداقل ۱۲۰ ثانیه برای بررسی نهایی فایل حجیم است. فضای خالی کافی در پوشه موقت و پوشه نهایی لازم است. فایل‌های نهایی در این بسته با لینک مستقیم تصادفی سرو می‌شوند؛ جلوگیری مطلق از اشتراک‌گذاری لینک نیازمند لینک امضاشدهٔ سمت هاست/CDN است.

برای Apache فایل storage.htaccess را با نام .htaccess در storage_dir قرار دهید. اگر هاست Options را مجاز نمی‌داند، تنظیم معادل را از پشتیبانی هاست بخواهید. برای Nginx: فهرست پوشه خاموش، اجرای PHP در پوشه فایل‌ها ممنوع و هدر X-Content-Type-Options: nosniff فعال شود.

فایل‌ها تا ۱ گیگابایت قابل ارسال‌اند. امضای SHA-256 هر قطعه بررسی می‌شود، سپس پیش از انتشار تمام قطعه‌ها و حجم نهایی دوباره بررسی می‌شوند. فایل کامل پیش از تأیید منتشر نمی‌شود. پاسخ تکراری باعث دوباره‌نوشتن قطعه نمی‌شود.
پس از قطع ارتباط، شروع/ادامه را بزنید. پس از بسته‌شدن صفحه یا خروج از حساب، دوباره وارد شوید و دقیقاً همان فایل را انتخاب کنید؛ امضای محتوای فایل مسیر ادامه را پیدا می‌کند. مرورگر اجازهٔ خواندن خودکار فایل محلی پس از بسته‌شدن صفحه را نمی‌دهد.
خطای 403: ورود/مجوز کاربر یا کلید اتصال. خطای اتصال: HTTPS، هدر Authorization و دسترسی سرور وردپرس به دریافت‌کننده را بررسی کنید.

اختیاری: روزی یک بار با Cron اجرای PHP CLI فایل cleanup.php را تنظیم کنید. فقط قطعه‌های نیمه‌کاره و اطلاعات جلسه‌ای که ۷ روز بی‌استفاده بوده‌اند پاک می‌شوند؛ فایل‌های کامل پاک نمی‌شوند. قبل از نصب، مسیرهای نمونه را حتماً جایگزین کنید.
آزمون محلی انجام‌شده: فایل واقعی ۴۰۰ MiB، قطع پاسخ، ادامه در جلسه مجدد، بازیابی قطعه ناقص، بررسی SHA-256 کامل و نهایی‌سازی تکراری. نصب روی هاست شما در این جلسه انجام نشده است.


راهنمای پیدا کردن مقادیر اتصال
- آدرس پایه را از لینک یک فایل روی زیردامنه بگیرید: برای https://dl.example.com/course-files/video.mp4 مقدار پایه https://dl.example.com/course-files است. HTTPS زیردامنه باید معتبر باشد.
- مسیر storage_dir آدرس وب نیست. در File Manager هاست، پوشه فایل‌های کامل را باز کنید و مسیر مطلق آن را ببینید (مثال: /home/account/public_html/course-files). اگر مسیر کامل نمایش داده نمی‌شود، از پشتیبانی هاست بپرسید.
- temporary_dir را در پوشهٔ حساب و بیرون از پوشه عمومی دامنه بسازید؛ مثلاً /home/account/private-edu-uploads. مسیر ممکن است در DirectAdmin متفاوت باشد. از همان مسیر واقعی استفاده کنید.
- public_url همان آدرس وب پوشه storage_dir است و باید با Base URL وردپرس یکسان باشد.
- token یک کلید جدید است که خودتان می‌سازید، نه رمز FTP یا رمز پنل هاست. از مدیر رمز عبور برای ساخت کلید تصادفی ۶۴ کاراکتری استفاده کنید؛ یا در ترمینال مورداعتماد: php -r 'echo bin2hex(random_bytes(32));'
- آدرس دریافت‌کننده از محل استخراج بسته ساخته می‌شود؛ مانند https://dl.example.com/edu-download-receiver/receiver.php. آن را با نام پوشه واقعی تطبیق دهید. باز کردن این URL در مرورگر بدون احراز هویت، 403 می‌دهد و تست صحیح اتصال نیست.
- فهرست JSON اختیاری است. نمونه tools/edu-download-index.php در ZIP آموزش قرار دارد: EDU_DL_ROOT را برابر مسیر storage_dir، EDU_DL_TOKEN را یک کلید تصادفی حداقل ۳۲ کاراکتری و هدر وردپرس را X-EDU-Token قرار دهید. نام فایل روی هاست را می‌توانید edu-files.php بگذارید. کلید فهرست مستقل از کلید دریافت‌کننده است. بدون این سرویس، حالت لینک مستقیم کافی است.

تست اتصال و گزارش پشتیبانی
۱. از مدیریت آموزشی ← تنظیمات کل ← هاست دانلود، «ذخیره اتصال و تست» را بزنید. فقط تنظیمات هاست ذخیره می‌شوند.
۲. تست، اعتبار پروتکل و احراز هویت، نوشتن پوشه موقت و نهایی، تطابق public_url، خواندن فایل کوچک از لینک عمومی، حذف آن و حد اندازهٔ تنظیم‌شده را بررسی می‌کند. در حالت فهرست، JSON نیز بررسی می‌شود. حالت لینک مستقیم بدون دریافت‌کننده فقط پاسخ‌دادن میزبان را بررسی می‌کند.
۳. هنگام بروز مشکل، «ثبت گزارش عیب‌یابی اتصال» را روشن و ذخیره کنید؛ تست یا عملیات ناموفق را تکرار کنید؛ سپس «دریافت گزارش عیب‌یابی» را بزنید و فایل JSON را برای پشتیبانی بفرستید. کلید، کوکی، اطلاعات کاربر، آدرس واقعی هاست و نام فایل در این گزارش نیستند.
۴. گزارش حداکثر ۴۰ رویداد تا ۷ روز دارد. بعد از بررسی، می‌توانید آن را پاک و ثبت را خاموش کنید. خطاهای قبل از رسیدن درخواست به PHP (مانند محدودیت وب‌سرور) ممکن است در این گزارش ثبت نشوند؛ نتیجهٔ تست و متن خطای مرورگر را نیز توضیح دهید.
۵. این تست کوچک، سرعت شبکه یا آپلود حجیم روی هاست واقعی را تضمین نمی‌کند. پس از اتصال، یک فایل نمونهٔ خودتان را در دوره امتحان کنید.

ارتقا از 1.0.0: receiver.php و cleanup.php را جایگزین کنید و config.php فعلی را حفظ کنید. فایل‌های نهایی و پوشه موقت حذف نشوند. cleanup.php علاوه بر جلسات قدیمی، فقط فایل‌های موقت تست edu-check-* بیش از یک روز را پاک می‌کند؛ در حالت عادی تست، فایل خودش را بلافاصله پاک می‌کند.
