Pasek postępu: PHP, MySql, pętla for while

Ostatnio do naszego CMS-a pisałem nowy moduł biuletynu internetowego. Prosty newsletter, a jednak wymaga sporo pracy i jak się domyślam to jeszcze nie koniec, pomimo pomyślnych pierwszych testów.

Do wysłania maili ściągniętych z bazy użyłem pętli while. Początek wyglądał tak, że jeśli mail się wysłał, to użytkownik biuletynu otrzymywał komunikat, że wiadomość została prawidłowo wysłana pod adres: xxx@domena.pl. Jak maili było w bazie 1000, to użytkownik otrzymywał 1000 takich komunikatów, co uznałem za niepotrzebne. Wymyśliłem więc, że chce aby użytkownik widział pasek postępu. Zaczęły się więc poszukiwania u wujka googla, jak by można by to rozwiązać. Powiem szczerze, że poszukiwania nie były łatwe. Owszem rozwiązań z jquery, czy ajaxem jest wiele, ale większość tyczy się np. z uploadowaniem plików, a my przecież chcemy aby postęp był liczony w miarę wykonania pętli FOR, czy WHILE.

Po kilkugodzinnych poszukiwaniach znalazłem. Z pomocą przyszedł blog SPidgorny. Rozwiązanie proste i jakże bardzo funkcjonalne:

<?php

require_once 'class.ProgressBar.php';

echo 'Starting…<br />';

$p = new ProgressBar();
echo '<div style="width: 300px;">';
$p->render();
echo '</div>';

for ($i = 0; $i < ($size = 100); $i++) {
 $p->setProgressBarProgress($i*100/$size);
 usleep(1000000*0.1);
}

$p->setProgressBarProgress(100);

echo 'Done.<br />';

?>

W 3 lini kodu mamy zaimportowaną klasę  class.ProgressBar.php. Możecie ją ściągnąć stąd

Jeśli chcecie zobaczyć jak śmiga pasek postępu DEMO do obejrzenia na serwerze InfraCOM

Marcin Gerwatowski

Marcin Gerwatowski. Tak się nazywam. 32 lata w 2014 roku. Wyrafinowany realista. Niektórzy mówią, że pesymista – kłamią. Lubie krótkie zdania. Od niedawna bloger. Uczący się. Tak więc, za wszelkie nieścisłości przepraszam!

1 Komentarz

  1. Staryyy to jest zajebiste! Szukałem tego w necie od tygodni, spać nie mogłem i pewnego dnia znalazłem to u ciebie. Wielkie dzięki!

Zostaw komentarz