Question

Est-il possible d'afficher une barre de progression en php? J'aime faire savoir à l'utilisateur ce que fait le script php.

Voici un exemple de résultat tiré de mon site Web http: // www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

J'ai une image de chargement statique avec du texte indiquant "Chargement en cours ...", lorsque la page est entièrement chargée, je masque le div de chargement. Mon script php va sur l'API amazonienne, l'API eBay et l'écran gratte quelques autres sites et au lieu d'un div de chargement statique, je voudrais mettre à jour ce div de chargement avec ce qui suit

Chargement d'amazon.com

// progresse amazon, une fois la mise à jour de chargement div

Chargement d'ebay.com

etc. etc.

Est-ce possible de le faire? Si oui quelle est la meilleure approche? Merci d'avance pour l'aide!

Était-ce utile?

La solution

Utilisez AJAX pour demander à PHP ce qu’il fait actuellement et disposez d’un système de file d’attente qui définit les tâches à exécuter ou non. Voici un exemple très basique:

Lorsque la tâche est démarrée, définissez les variables suivantes:

Utilisez AJAX pour demander à PHP ce qu’il fait actuellement et disposez d’un système de file d’attente qui définit les tâches à exécuter ou non. Voici un exemple très basique:

Lorsque la tâche est démarrée, définissez les variables suivantes:

<*>

Une fois que PHP est chargé sur eBay, isEbayLoaded est défini sur true, puis AJAX peut simplement demander à PHP si ebay a déjà été chargé, puis à amazon, puis à quoi que ce soit d'autre. Tout ce que PHP aurait à faire, c’est de vérifier si ces variables ont été définies comme étant vraies, ce qui signifie que les tâches ont été complétées.

SESSION['isEbayLoaded'] = false;

Utilisez AJAX pour demander à PHP ce qu’il fait actuellement et disposez d’un système de file d’attente qui définit les tâches à exécuter ou non. Voici un exemple très basique:

Lorsque la tâche est démarrée, définissez les variables suivantes:

<*>

Une fois que PHP est chargé sur eBay, isEbayLoaded est défini sur true, puis AJAX peut simplement demander à PHP si ebay a déjà été chargé, puis à amazon, puis à quoi que ce soit d'autre. Tout ce que PHP aurait à faire, c’est de vérifier si ces variables ont été définies comme étant vraies, ce qui signifie que les tâches ont été complétées.

SESSION['isAmazonLoaded'] = false;

Une fois que PHP est chargé sur eBay, isEbayLoaded est défini sur true, puis AJAX peut simplement demander à PHP si ebay a déjà été chargé, puis à amazon, puis à quoi que ce soit d'autre. Tout ce que PHP aurait à faire, c’est de vérifier si ces variables ont été définies comme étant vraies, ce qui signifie que les tâches ont été complétées.

Autres conseils

Je l'ai déjà fait auparavant avec une solution très simple:

ob_flush();

Il suffisait de créer un seul div avec les noms de classe appropriés:

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

Ensuite, mon PHP était fondamentalement:

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

   scrapeSite($site);
}

Ceci utiliserait un style d'arrière-plan pour indiquer le site que vous souhaitez gratter.

Si vous devez utiliser le balisage, vous pouvez simplement imprimer un nouveau " Chargement " div à chaque fois (avec un identifiant unique), ainsi qu'un style permettant de définir le style de la division précédente sur "display: none".

Bien sûr, rappelez-vous que certains navigateurs nécessitent au moins 1024 octets (quelque chose comme 4k!) avant de rendre quoi que ce soit.

La meilleure approche consiste à laisser votre javascript effectuer des appels ajax vers le serveur et savoir où il en est, afin que vous puissiez donner quelques informations à l'utilisateur.

Vous pouvez commencer par avoir une barre de progression pour le téléchargement, puis vous continuez simplement à afficher la progression de l'application.

Je voudrais faire une demande pour chaque site et utiliser le résultat de cette page (XML, JSON, etc.) pour que l'autre page sache ce qui se passe.

Par exemple ... code pseudo:

  • rassembler des sites
  • pour la boucle qui charge la page ajax
  • la page ajax renvoie chaque demande avec un message d'état, par exemple. - "Chargement d'Amazon ...."

C'est tout!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top