Frage

Gibt es eine Möglichkeit, einen Fortschrittsbalken in PHP zu zeigen? Ich mag den Benutzer wissen lassen, was der PHP-Skript tut.

Hier ist ein Ergebnis Beispiel aus meiner Website http: // www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

Ich habe eine statische Belastung Bild mit etwas Text, der sagt „Loading ...“, wenn die Seite vollständig geladen ist, blende ich das Laden div. Mein PHP-Skript, um die amazon api geht, ebay api und Bildschirm kratzt ein paar anderen Seiten und anstelle einer statischen Belastung div würde ich das Laden div mit der folgenden aktualisieren möchte

Laden amazon.com

// Fortschritt amazon, wenn Sie fertig Update Laden div

Laden ebay.com

usw. etc.

Ist das möglich zu tun? wenn ja, was ist der beste Ansatz? Dank im Voraus für die Hilfe!

War es hilfreich?

Lösung

AJAX mit PHP zu fragen, was es im Moment tut, und hat ein Warteschlange-System, das definiert, welche Aufgaben abgeschlossen sind oder nicht. Hier ist ein sehr einfaches Beispiel:

Wenn der Task gestartet wird, macht es die folgenden Variablen setzen:

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

Sobald PHP Lasten eBay, wäre es isEbayLoaded auf true gesetzt, und dann AJAX könnte einfach fragen PHP wenn ebay noch geladen wurde, dann amazon, dann was Sie sonst noch benötigt wird. Alle PHP würden tun müssen, ist zu überprüfen, ob diese Variablen als wahr gesetzt wurden, was bedeuten würde, dass die Aufgaben abgeschlossen worden sind.

Andere Tipps

Ich habe dies erreicht, bevor sie mit einer wirklich einfachen Lösung:

ob_flush();

Alles, was es erforderlich war, ein einziges div mit entsprechenden Klassennamen zu erstellen:

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

Dann, mein PHP war im Grunde:

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

   scrapeSite($site);
}

Dies würde einen Hintergrund-Stil verwenden, um zu zeigen, welche Seite Sie sich kratzen.

Wenn Sie Markup verwenden müssen, können Sie einfach einen neuen „Laden“ auszudrucken jedes Mal div (mit einer eindeutigen ID), zusammen mit einem Stil der vorherigen div Stil auf einzustellen. „Display: none“

Natürlich, denken Sie daran, dass einige Browser erfordern mindestens 1024 Bytes (Somethings 4k!), Bevor irgendetwas zu machen.

Der beste Ansatz ist Ihr Javascript macht Ajax-Aufrufe an den Server haben und herausfinden, wo es ist, so können Sie ein Feedback an den Benutzer geben.

Sie können mit mit einem Fortschrittsbalken für das Hochladen starten, und dann fahren Sie nur den Fortschritt der Anwendung zeigen.

Ich würde eine Anfrage für jeden Standort machen, und die Ausgabe verwenden, von dieser Seite (XML, JSON, was auch immer) weiß, die andere Seite zu lassen, was los ist.

Zum Beispiel ... Pseudo-Code:

  • sammeln Sites
  • für Schleife, die Ajax-Seite
  • lädt
  • Ajax-Seite gibt jede Anforderung mit einer Statusmeldung z.B. - "Einlegen von Amazon ...."

Das ist es!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top