التعامل مع التأخير عند استرداد الملفات من الملقم البعيد في PHP

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

سؤال

وأنا أعمل مع PHP الوصول إلى الملفات والصور من خدمة المناطق النائية. أنا في الغالب باستخدام file_get_contents () ونسخة () وظائف.

والوصول أحيانا ملف نصي صغير أو صورة هو لحظة تقريبا، ولكن مرة أخرى على ما يبدو للحصول على "تمسك" لمدة دقيقة على نفس الملف المحدد. وأحيانا يسبب في الواقع مخطوطتي لشنق، وحتى عندما أتوقف عن السيناريو لا يزال أباتشي يحبس لعدة دقائق.

وأنا على استعداد تام لقبول حقيقة أن وصلات الانترنت يمكن أن يكون مقشر. قلقي هو أنني استعادة برشاقة وأنني لا تحطم أباتشي - وظيفة PHP set_time_limit () إرجاع فقط خطأ فادح. وبالإضافة إلى ذلك، هناك ملاحظة في دليل PHP أن الوقت الذي يقضيه في عمليات تيار لا تساهم في وقت تشغيل البرنامج النصي.

وكيف يمكنني استعادة من مشاكل الاتصال هذه والسماح مخطوطتي على الاستمرار؟ ولماذا هذا تسبب أباتشي لشنق؟

شكرا، بريان

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

المحلول

$options = array( 'http' => array(
      'user_agent'    => 'Firefox wannabe',
      'max_redirects' => 1,
      'timeout'       => 10,
  ) );
$context = stream_context_create( $options );
$content = file_get_contents( $url, false, $context );

ونلقي نظرة على stream_context_create و <لأ href = "HTTP: //php.net/context.http "يختلط =" نوفولو noreferrer "> خيارات HTTP السياق . سوف رمز أعلاه تعيين مهلة على اتصال، وسوف تسمح لإعادة توجيه واحد.

وهذا يجب منع الوصول إلى المهلة.

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

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