# Ladeanzeige mit PHP



## DerUnsympath (17. März 2006)

Hallihallo liebe Community,
ich komme gleich zum Punkt, denn Loben macht mich nur sympathisch. 

Folgendes würde ich gerne realisiert bekommen: Ich betreibe einen PR Check Service, der die einzelnen DataCenter ausliest und den jeweiligen PR ausgibt. Die DataCenter-IPs hole ich aus einer Liste, die ich dann via foreach-Schleife jedesmal an den String übergebe. Jedoch kann dies u.U. einige Zeit dauern, deswegen würde ich gerne solange bis er die Seite fertig geladen bzw. alle DC-IPs durch hat, eine kleine Meldung ausgeben á la "Bitte warten..." und dann die Ergebnisliste am Stück ausgeben.

Habe das schon auf einigen Seiten gesehen, müsste also möglich sein. Hat jemand eine Idee? 

Gruß


----------



## fanste (17. März 2006)

Probier mal das. Bin mir aber nicht sicher, ob das so stimmt.

```
ob_start();
#...
echo "Bitte warten...";
flush();
#Weitere Ausführung
ob_end_flush();
```


----------



## Irgendjemand_1 (18. März 2006)

Genau das hab ich mir auch überlegt, aber ich habs dann gelassen zu schreiben, weil ich der Meinung bin, dass das etwas unsauber ist ... Sollte nichtmal mit allen Browsern funktionieren.

Und das "Bitte warten ..." würde dann auch noch da stehen, wenn die Seite fertig geladen hat.


----------



## DerUnsympath (18. März 2006)

Hallo ihr beiden,

leider hat das so nicht funktioniert in meinem Fall. 
Gibt es noch andere Möglichkeiten? Es gibt ja Scripte, die rechnen aus wie lange es braucht bis die Seite geladen wird. Könnte man es so hinbekommen, dass die Meldung "Bitte Warten" solange ausgegeben wird bis das "Geladen in XX Sekunden"-Script fertig ist, so als Workaround?

Gruß


----------



## Mairhofer (18. März 2006)

Hi,

ich werfe mal fröhlich und lustig JavaScript in die gesellige Runde.
Am fang des Script eine JS ausgeben, das Bitte warten anzeigt und nach dem PHP Teil wieder etwas, das diese JS Anzeige "unsichtbar" macht.
Ok, ich bin kein JS Fan, daher weiss ich nicht ob das geht und ob es Sinn macht. Kam mir aber nur gerade in den Kopf durch Plesk, die sowas zum Überbrücken des schneckenlahmen Systems eingebaut haben. Oder gab es da nicht auch mal ein Modhackdingsbumserweiterung fürs WoltLabBB

Gruss

P.S.: Konnte natürlich nen paar Headerprobleme verursachen, ich sag nur "Headers already sent..:"


----------



## fanste (18. März 2006)

Ich habe bei meinem Webspace Plesk. Habe auch den Code gefunden. Weiß jetzt nicht, ob ich das hier senden darf, da die "Software" ja etwas kostet. Wisst ihr, ob ich das darf? Wenn ja, amch ichs nämlich.


----------



## Mairhofer (18. März 2006)

Ich bin ehrlich, ich weiss nicht ob man das darf.

Ich würde sagen, man gibt mal einen Link raus zur Demo von Plesk, die man öffentlich aufrufen kann unter:

Demo Plesk 7.5 Reloaded

Damit auch jeder weiss, was wir meinen, wenn wir von Plesk reden.

Gruss


----------



## Watusimann (18. März 2006)

Zum Thema flush gbit es bei php.net dieses schöne Tool

```
<html>
<head>
<style type="text/css"><!--

div {
 margin: 1px;
 height: 20px;
 padding: 1px;
 border: 1px solid #000;
 width: 275px;
 background: #fff;
 color: #000;
 float: left;
 clear: right;
 top: 38px;
 z-index: 9
}

.percents {
 background: #FFF;
 border: 1px solid #CCC;
 margin: 1px;
 height: 20px;
 position:absolute;
 width:275px;
 z-index:10;
 left: 10px;
 top: 38px;
 text-align: center;
}

.blocks {
 background: #EEE;
 border: 1px solid #CCC;
 margin: 1px;
 height: 20px;
 width: 10px;
 position: absolute;
 z-index:11;
 left: 12px;
 top: 38px;
 filter: alpha(opacity=50);
 -moz-opacity: 0.5;
 opacity: 0.5;
 -khtml-opacity: .5
}

-->
</style>
</head>
<body>

<?php

if (ob_get_level() == 0) {
   ob_start();
}
echo str_pad('Loading... ',4096)."<br />\n";
for ($i = 0; $i < 25; $i++) {
   $d = $d + 11;
   $m=$d+10;
   //This div will show loading percents
   echo '<div class="percents">' . $i*4 . '%&nbsp;complete</div>';
   //This div will show progress bar
   echo '<div class="blocks" style="left: '.$d.'px">&nbsp;</div>';
   flush();
   ob_flush();
   sleep(1);
}
ob_end_flush();
?>
<div class="percents" style="z-index:12">Done.</div>
</body>
</html>
```


----------



## fanste (19. März 2006)

Also, da es den Code auch in der Demoversion zu sehen gibt, denke ich mal, dass ich ihn posten kann. (Hab jetzt mal alles genommen, was mit l wie Loader beginnt. hab nicht überprüft, ob das alles benötigt wird)

```
<?
function lsetup_handler(e)
{
	lsetup(this);
	return true;
}

function lsetup(target)
{
	try {
		if (!target)
		target = this;

		var o_set = target.document.getElementById('loaderContainerWH');
		var o_getH = target.document.getElementsByTagName('BODY')[0];

		o_set.style.height = o_getH.scrollHeight;
	} catch (e) {
	}
}

function lon(target)
{
	try {
		if (parent.visibilityToolbar)
		parent.visibilityToolbar.set_display("standbyDisplayNoControls");
	} catch (e) {}

	try {
		if (!target)
		target = this;

		lsetup(target);

		if (!target._lon_disabled_arr)
			target._lon_disabled_arr = new Array();
		else if (target._lon_disabled_arr.length > 0)
			return true;

		target.document.getElementById("loaderContainer").style.display = "";
		var select_arr = target.document.getElementsByTagName("select");

		for (var i = 0; i < select_arr.length; i++) {
			if (select_arr[i].disabled)
			continue;

			select_arr[i].disabled = true;
			_lon_disabled_arr.pop(select_arr[i]);
			var clone = target.document.createElement("input");
			clone.type = "hidden";
			clone.name = select_arr[i].name;
			var values = new Array();
			for (var n = 0; n < select_arr[i].length; n++) {
				if (select_arr[i][n].selected) {
					values[values.length] = select_arr[i][n].value;
				}
			}
		clone.value = values.join(",");
		select_arr[i].parentNode.insertBefore(clone, select_arr[i]);
		}
	} catch (e) {
		return false;
	}
	return true;
}

function loff(target)
{
	try {
		if (parent.visibilityToolbar) {
			parent.visibilityToolbar.set_display(visibilityCount
			 ? "standbyDisplay"
			 : "standbyDisplayNoControls");
		}
	} catch (e) {}

	try {
		if (!target)
		target = this;

		target.document.getElementById("loaderContainer").style.display = "none";

		if (target._lon_disabled_arr) {
			while(_lon_disabled_arr.legth > 0) {
				var select = _lon_disabled_arr.push();
				select.disabled = false;

				var clones_arr = target.document.getElementsByName(select.name);
				for (var n = 0; n < clones_arr.length; n++) {
					if ("hidden" == clones_arr[n].type)
						clones_arr[n].parent.removeChild(clones_arr[n]);
				}
			}
		}
	} catch (e) {
		return false;
	}
	return true;
}

function lsubmit(f)
{
	try {
		if (f.lock.value == "true")
			return false;
			f.lock.value = "true";
	} catch (e) {
	}

	lon();

	try {
		f.submit(f);
	} catch (e) {
		return false;
	}
	return true;
}
```

Aufruf und der "LoaderContainer"

```
<body onLoad="_body_onload();" onUnload="_body_onunload();" id="mainCP" class="">
<table border="0" cellspacing="0" cellpadding="0" id="loaderContainer" onClick="return false;">
   <tr>
      <td id="loaderContainerWH">
         <div id="loader">
            <table border="0" cellpadding="0" cellspacing="0" width="100%">
               <tr>
                  <td>
                     <p><img src="/skins/winxp.silver/icons/loading.gif" height="32" width="32" alt=""/><strong>Bitte warten.<br>Laden ...</strong></p>
                  </td>
               </tr>
            </table>
         </div>
      </td>
   </tr>
</table>
<!-- WEITER GEHTS IM CODE -->
```


----------

