PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Bitte warten"-Meldung vom PHP-Script?


st68
28.07.2009, 17:01:05
hallo, mal wieder...

da ihr mir schon mal mit einem denkanstoß geholfen habt, stell ich doch gleich die nächste frage:

gibts irgendwie ne möglichkeit dem seitenbesucher anzuzeigen, das php im hintergrund wirklich arbeitet und sich die seite/server nicht evt. festgefressen hat?

mein problem ist jetzt (nur noch), das php u.U. sehr lange braucht, bis es einen ordner voller bilder umgewandelt und abgespeichert hat und die seite anzeigt.

das problem an php-scripten ist nach meinem wissensstand, dass erst das komplette script abgearbeitet werden muß, bis das ergbnis ausgegeben wird. solange steht die vorherige seite still und es wird nicht mal ne eieruhr, oder so was angezeigt.

eine warteseite, in der per iFrame die seite mit dem script geladen wird, muss wohl scheitern, weil ja das im iFrame arbeitende script, wenn es fertig ist, nicht die übergeordnete seite schließen und ne neue aufmachen kann.

genauso wird wohl das anzeigen eines layers scheitern müssen, der über der seite liegt, weil der ja kaum vom php-script beendet werden kann, wenn es fertig ist.

kann man also ein script am anfang irgendwas anzeigen lassen, das so lange zu sehn bleibt, bis das script abgearbeitet ist und dann verschwindet, um dem neuen inhalt platz zu machen?

also user klickt auf link -> "bitte warten-meldung" erscheint -> script arbeitet sich durch -> script beendet "bitte warten-meldung" und zeigt den erarbeiteten inhalt an.

ich weiß, das fast überall zu lesen ist, dass das nicht geh kann, aber es gibt doch genug webseiten, die so schöne warte-animationen anzeigen. wie machen die das? haben die nix mit php zu tun?

ideal wäre es natürlich so:<?php

echo "Bitte warten...";

PHP_Funktion();

echo "Ergebnis";

?>

aber so einfach gehts ja leider nicht...

tewe
31.07.2009, 13:55:44
eigentlich so einfach nicht möglich, da der php-code serverseitig ausgeführt wird...

eine möglichkeit das problem zu lösen, wäre der weg über xajax...
hier mal ein kleines beispiel:


<?PHP
require ('lib/xajax/xajax.inc.php');
require ('lib/xajax/xajaxCompress.php');

function dauertEwig()
{
$array = array();
$objResp = new xajaxResponse();

for($i=0; $i<900000; $i++)
$array[] = $i;

$objResp->addAppend("warten","style.display","none");

return $objResp;
}

$xajax = new xajax();
$xajax->registerFunction("dauertEwig");
$xajax->processRequests();
?>
<html>
<head>
<script>
function deineFunc()
{
document.getElementById('warten').style.display = '';
xajax_dauertEwig();
}
</script>
<? $xajax->printJavascript('lib/xajax/'); ?>
</head>
<button onclick="deineFunc()">start</button>
<div id="warten" style="display:none">bitte warten</div>
<body>
</html>


hoffe das hilf ein wenig ;)

mfg

s1r10n
02.08.2009, 19:07:46
praktisch ist es mit allen "modernen" browsern (firefox IE safari chrome opera hab ich getestet) möglich...


du gibst einfach regelmäßig inhalt aus und benutzt flush(); um es direkt zum browser zu schicken...

nun musst du mit einigen tücken der browser rechnen

die webkit engine (safari/chrome) rendert den inhalt nahc meiner erfahrung nur wenn er komplett fertig geladen wurde oder per javascript reinkommt

(also einfach mit javascript ein document.write();)
IE tut (vor 8 bei dem 8er weiß ichs nich) erst rendern wenn er eine gewisse anzahl an bytes empfangen hat... heißt evtl dummy text vorher ausgeben...

damit gehts definitiv... wie du jetzt im php feststellst ob er noch arbeitet ist ne andere sache

st68
07.08.2009, 12:46:10
eine möglichkeit das problem zu lösen, wäre der weg über xajax...
hier mal ein kleines beispiel:tja, ich hatte gehofft es gibt irgendeinen trick bei dem ich es mir ersparen könnte mich in eine neue scriptsprache einzuarbeiten. danke für dein beispielscript. das hebe ich mir natürlich gut auf. und wenn ich mal wieder ordentlich zeit habe versuche ich das auch umzusetzen.

(also einfach mit javascript ein document.write();)das problem ist ja, das der server erst die seite abschickt, wenn php seine arbeit beendet hat. also auch das "document.write();". zumindest kams bei allen meinen versuchen so raus.
wie du jetzt im php feststellst ob er noch arbeitet ist ne andere sacheleider die wichtigste sache. denn sonst ginge es wohl auch mit der standart-warteseite, php-script im iFrame und ner umleitung von der warteseite weg, wenn php fertig ist...

trotzdem danke für eure mühen. aber so werd ich wohl noch ne weile mit dem problem leben müssen.

st68
07.09.2009, 11:23:44
hallo,

bin jetzt auf ne ganz simple lösung verfallen:

der link zum seitenaufruf, im menü, führt erst mal auf eine "wait.php"

<html>
<head>
<meta http-equiv="Refresh" content="0; URL=index.php">
<link rel="stylesheet" type="text/css" href="/style.css">
<title></title>
</head>
<body>

<center><h1><a href="index.php">bitte warten ...</a></h1></center>

</body>
</html>

die dann per metarefresh auf die seite mit dem zeitraubenden php-script verweist.
das gute daran ist, das die "wait.php" solange angezeigt wird, bis die "index.php" fertig ist.
das schlechte ist, das metarefresh nicht deaktiviert sein darf.
aber dagegen kann man zur not den link von hand anklicken.

noch ein schönheitsfehler (zumindest im IE). gif-animationen stehn unbeweglich auf der warteseite. weiß dagegen jemand ein mittel?