Pasek stanu wykonywanego programu

0

Witam,
Posiadam kod w php który wykonuje się x czasu. Chciałbym zrobić pasek stanu na podstawie licznika pętli aby wiedzieć ile programu się już wykonało.

Przykład, mam taki kod php:

for($i = 0 ;$i < 10; $i ++)
	{
		sleep(1);
		echo $i.",";
	}

Znalazłem taki kod do paska:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Progressbar - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#progressbar" ).progressbar({
      value: 55
    });
  } );
  </script>
</head>
<body>
 
<div id="progressbar"></div>
 
</body>
</html>

I nie wiem jak to połączyć bo to dla mnie nowość. Czy da się jakoś przypisać wartość licznika z kodu php do wartości zmiennej w javascript? Czy może zapisywać wartość licznika z php do pliku .txt a w javiescript odczytywać co sekundę plik i na podstawie wartości z pliku tworzyć stan paska?
Chcę zrobić tak aby po uruchomieniu pokazywał się pasek stanu i jak dojdzie do końca to widzimy wynik php.

0

Po pierwsze na skrypty i strony nie mówimy "program".
Po drugie nie zrobisz tego tak. php sie wykonuje do końca, aż skończy. Jedyny sposób, to zapisywać bieżący stan w bazie a obok zrobic endpoint który by ten stan zwracał i na froncie w js robic pobieranie stanu co parę sekund.

0
mr_jaro napisał(a):

Po pierwsze na skrypty i strony nie mówimy "program".
Po drugie nie zrobisz tego tak. php sie wykonuje do końca, aż skończy. Jedyny sposób, to zapisywać bieżący stan w bazie a obok zrobic endpoint który by ten stan zwracał i na froncie w js robic pobieranie stanu co parę sekund.

Nie będzie szybciej na plikach zamiast bazy? Nie macie jakiegos przykładowego kodu? bo problem raczej popularny

1

I myślisz, że odczujesz czy coś się wykona 0,01ms czy 0,02ms? :D Takie rzeczy robi się albo na bazie danych uwzględniając inne informacje o jobie albo na systemie cache

0
$.ajax({
    url: "plik.txt",
    success: function(data) {
        var a = data;
    }
});
document.write(a);

jak przypisać zawartość pliku do zmiennej a żeby była dostępna poza funkcją? bo tak nie działa

2
<progress id="progress" value="0" max="100"></progress>

<?php
	for($i=0; $i<=100; $i+=10) {
		echo '<script>document.getElementById("progress").value = '.$i.'</script>';
		flush();
		ob_flush();
		sleep(1);
	}

Możesz też w ten sposób wyświetlać stan licznika pętli x/x zrobionych
Ponadto symfony ma fajnego progressbara w konsoli https://symfony.com/doc/current/components/console/helpers/progressbar.html
Nie zapomnij o ustawieniu max_execution_time dla php

0
.__. napisał(a):
<progress id="progress" value="0" max="100"></progress>

<?php
	for($i=0; $i<=100; $i+=10) {
		echo '<script>document.getElementById("progress").value = '.$i.'</script>';
		flush();
		ob_flush();
		sleep(1);
	}

Możesz też w ten sposób wyświetlać stan licznika pętli x/x zrobionych
Ponadto symfony ma fajnego progressbara w konsoli https://symfony.com/doc/current/components/console/helpers/progressbar.html
Nie zapomnij o ustawieniu max_execution_time dla php

Dzięki, bardzo mi to pomogło, o coś takiego mi chodziło. Jeszcze jedno pytanko

<span id = "id3"></span>

	<?php
	$czas = date('d.m.Y -- H:i:s',time());
	echo '<script>document.getElementById("id3").innerHTML = '. $czas .'</script>';
	flush();
    ob_flush();
	?>

Jak przesłać zmienną czas do spana? Bo jeśli bym usunął kropki, spacje i kreski to oczywiście się podmieni, a ja chcę z tymi znakami. Jest jakiś sposób?

1

Stringi dajesz w cudzysłów, liczb nie musisz

echo '<script>document.getElementById("id3").innerHTML = "'. $czas .'"</script>';

1 użytkowników online, w tym zalogowanych: 0, gości: 1