"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تمكين التنزيلات القابلة للاستئناف في برنامج نقل ملفات PHP الخاص بي؟

كيف يمكنني تمكين التنزيلات القابلة للاستئناف في برنامج نقل ملفات PHP الخاص بي؟

تم النشر بتاريخ 2025-01-19
تصفح:717

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

تمكين التنزيلات القابلة للاستئناف باستخدام برنامج PHP لنقل الملفات

مقدمة

عند نقل الملفات باستخدام برامج PHP النصية لأغراض أمنية، المسار المطلق للملفات القابلة للتنزيل في كثير من الأحيان يجب أن تكون مخفية. ومع ذلك، قد لا تدعم البرامج النصية التقليدية لنقل ملفات PHP التنزيلات القابلة للاستئناف، مما يسبب إزعاجًا للمستخدمين النهائيين الذين يواجهون انقطاعات في الاتصال.

الحل: دعم التنزيلات القابلة للاستئناف

لتمكين التنزيلات القابلة للاستئناف، يمكن اتباع الخطوات التالية: مأخوذة:

  1. أرسل نطاقات القبول: رأس البايت: هذا يُعلم الرأس العميل بأن المحتوى الجزئي مدعوم.
  2. التعامل مع طلبات المحتوى الجزئي: عند تلقي طلب باستخدام النطاق: bytes=x-y head، قم بتحليل النطاق، والبحث عن الإزاحة المطلوبة في الملف، وأرسل نطاق البايت المطلوب.
  3. قم بتعيين رمز حالة HTTP للمحتوى الجزئي: الرد باستخدام HTTP/1.0 206 جزئي محتوى يشير إلى نجاح النقل الجزئي.

تنفيذ PHP

فيما يلي نموذج لتطبيق هذه المبادئ في PHP:

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
}

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($offset > 0) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset   $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);

يقوم هذا البرنامج النصي أولاً بالتحقق مما إذا كان قد تم تقديم طلب محتوى جزئي. إذا كان الأمر كذلك، فإنه يوزع النطاق من رأس النطاق، ويسعى إلى الإزاحة المناسبة في الملف، ويرسل نطاق البايت المطلوب. يقوم البرنامج النصي أيضًا بتعيين رأس Accept-Ranges على البايتات ويرسل رمز حالة HTTP المناسب للمحتوى الجزئي إذا لزم الأمر.

من خلال تنفيذ هذه التدابير، يمكن دعم التنزيلات القابلة للاستئناف باستخدام البرامج النصية لنقل ملفات PHP، مما يوفر حلاً قويًا لعمليات نقل الملفات التي يمكن استئنافها بعد الانقطاع.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3