سؤال

هل هناك طريقة لإظهار شريط التقدم في PHP؟أرغب في السماح للمستخدم بمعرفة ما يفعله برنامج PHP النصي.

إليك مثال نتيجة من موقع الويب الخاص بي http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

لدي صورة تحميل ثابتة مع بعض النص الذي يقول "جارٍ التحميل..."، وعندما يتم تحميل الصفحة بالكامل، أقوم بإخفاء قسم التحميل.ينتقل نص php الخاص بي إلى amazon api وebay api ويزيل الشاشة موقعين آخرين وبدلاً من قسم التحميل الثابت، أود تحديث div التحميل بما يلي

تحميل amazon.com

// تقدم أمازون، عند الانتهاء من تحميل التحديث div

تحميل موقع ebay.com

إلخ.إلخ.

هل هذا ممكن ان يحدث؟إذا كان الأمر كذلك ما هو النهج الأفضل؟شكرا مقدما للمساعده!

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

المحلول

استخدم AJAX أن نسأل PHP ما تقوم به في هذه اللحظة، ويكون هناك نظام الطابور الذي يحدد ما يتم الانتهاء من المهام أو لا. وهنا مثال بسيط جدا:

عند بدء المهمة، وجعلها تعيين المتغيرات التالية:

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

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

نصائح أخرى

ولقد أنجز هذا من قبل مع حل بسيط حقا:

ob_flush();

وكل ما المطلوبة وخلق شعبة واحدة مع أسماء فئة المناسبة:

<div class="loading">
    Loading...
</div>

وبعد ذلك، كان لي PHP أساسا:

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

وهذا من شأنه أن استخدام نمط خلفية لإظهار الموقع الذي سيكون لكم كشط.

إذا كان يجب استخدام الترميز، يمكنك طباعة ببساطة على "تحميل" الجديد DIV في كل مرة (مع معرف فريد)، جنبا إلى جنب مع نمط لتحديد أسلوب شعبة السابق ل". عرض: لا شيء"

وبطبيعة الحال، أن نتذكر أن بعض المتصفحات تتطلب ما لا يقل عن 1024 بايت (سمثينغس 4K!) قبل تقديم أي شيء.

والنهج الأفضل هو أن يكون جافا سكريبت الخاصة إجراء مكالمات اياكس إلى الخادم ومعرفة أين هو في، حتى تتمكن من إعطاء بعض ردود الفعل للمستخدم.

ويمكنك أن تبدأ مع وجود شريط التقدم لتحميل، وبعد ذلك فقط الاستمرار في اظهار التقدم للتطبيق.

سأقدم طلبًا لكل موقع، وأستخدم مخرجات تلك الصفحة (XML، JSON، أيًا كان) للسماح للصفحة الأخرى بمعرفة ما يحدث.

على سبيل المثال... كود psuedo:

  • جمع المواقع
  • للحلقة التي تقوم بتحميل صفحة اياكس
  • تقوم صفحة ajax بإرجاع كل طلب مع رسالة حالة، على سبيل المثال.- "جارٍ تحميل أمازون..."

هذا كل شيء!

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