تحميل ملف بحجم كبير PHP

  • DeltaForce

السلام عليكم و رحمة الله و بركاته

هذا الكود و جدته في Stackoverflow يقوم بتحميل ملفات بحجم كبير بدون ان تظهر لك اي رسالة خطاء من السيرفر

طبعا كنت استخدم دالة خاصة بالتحميل تعتمد على curl لكنها لا تعمل على الملفات الكبيرة حيث حمل لي 40MB من ملف حجمه 80MB . و كنت دائما استغرب في توقف الكود عن هذا الحجم رغم ان سرعة خط الاتصال بالسيرفر تمكن curl من تحميل الملف قبل تخطي الحد الاقصى لتنفيد السكربت .

المهم يبدوا ان الخطاء كان من الذاكرة حيث تمتلي الذاكرة بسرعة عند تحميل ملف كبيرة و تظهر رسالة 404 Not found

<?php     
function download($file_source, $file_target='structure.rdf.u8.gz') {
    $rh = fopen($file_source, 'rb');
    $wh = fopen($file_target, 'w+b');
    if (!$rh || !$wh) {
        return false;
    }

    while (!feof($rh)) {
        if (fwrite($wh, fread($rh, 4096)) === FALSE) {
            return false;
        }
        echo ' ';
        flush();
    }

    fclose($rh);
    fclose($wh);

    return true;
}
     $result = download('
http://rdf.dmoz.org/rdf/str...

المصدر

لا اعرف ان كانت نفس الفكرة ممكن تنفيدها على curl او file_get_content

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

الكود يقوم بقراءة جزء من الملف بشكل دوري... لا أعتقد أنه سيحمل من سرفر لا يقبل Content-Range. كما أنه سيكون أبطأ...

يمكنك كتابة الملف مباشرة بال cURL إلى القرص الصلب عبر CURLOPT_FILE.

المثال هنا...

DeltaForce أضف ردا

شكرا لتنبيه بخصوص Content-Range بالفعل هناك مواقع لا تقبل الاتصال . الحل كان تغيير الاتصال الى HTTP 1.0

بالنسبة لدالة curl CURLOPT_FILE فهي مستخدمة عندي و هي لا تنفع في الإستضافة المشتركة . قامت بتحميل 40MB وتوقف السكربت عن العمل .

بالنسبة للسرعة fopen كانت اسرع من curl بثانية من اصل ثلاثة ثواني جربتها اكثر من مرة .