تدفق الملف المحلي من PHP أثناء كتابةه بواسطة عملية حليقة

StackOverflow https://stackoverflow.com/questions/2034831

سؤال

أنا أقوم بإنشاء خادم وكيل بسيط لموقع الويب الخاص بي. لماذا لا أستخدم MOD_PROXY و MOD_CACHE هو مناقشة مختلفة. إليك الرمز:

    shell_exec("nohup curl --create-dirs -o {$write_path} {$source_url} > /dev/null 2> /dev/null & echo $!");
    sleep(1);

    $read_speed = 65.5; # 65.5 kb/s download rate
    $handle = fopen($write_path, "rb");

    $content_type = select_meta_item($headers, 'Content-Type');
    $file_size = select_meta_item($headers, 'Content-Length');
    send_headers($content_type, $file_size); 
    flush();

    while (!feof($handle))
    {
        echo fread($handle, round($read_speed * 1024));
        flush();
        sleep(1);
    }

    fclose($handle);

تدفق MP3 لا يعمل باستخدام هذه الطريقة. يلعب في الكروم، ولكن ليس في فايرفوكس. في البداية سأتأتخدم هذا لتدفق ملفات MP3 عبر مشغل JW طويل الذيل. إذا كان كل شيء يعمل، سأكون أيضا استخدام هذا لإرسال ملفات ZIP.

هل كانت مفيدة؟

المحلول 2

اكتشفتها. الرمز الذي يعمل بشكل جيد.

تم استدعاء الملف بواسطة Apache بواسطة Handler 404 (Errordocument). أرسلت Apache تلقائيا رأس 404 قبل كتابة البرنامج النصي PHP.

هذا الملف (الرمز أعلاه)، لا يبدأ عملية حليقة وإعادة توجيه الملفات التي تتدفق. منذ إرجاع Apache 404، تجاهل فايرفوكس استجابة MP3. (في حين لم يكن الكروم). الآن بعد أن أعيد توجيه، فإنه يعمل بشكل جيد.

نصائح أخرى

السؤال هو ما إذا كان يمكن بث تنسيق الملف الخاص بك من خلال تطبيق العميل. إذا فايرفوكس لا يدعم تشغيل mp3 حتى يتم تنزيلها، لن تساعدك أي مبلغ من الخداع جانب الخادم في تحقيق الدفق. ستحتاج إلى دعم جانب العميل، مثل لاعب مضمن على أساس الفلاش.

للحصول على ملفات ZIP، بالنظر إلى وضع جدول الترميز في نهاية من الأرشيف، لن يتمكن أي برنامج من فتحه حتى يتم تنزيله بالكامل.

كملاحظة جانبية، هل فكرت في إنشاء FIFO، مشيرا curl في المدخلات FIFO، وتطبيق readfile إلى إخراج FIFO، مما ترك نظام التشغيل يتعامل مع الأشياء؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top