Horst Nogajski: Beenden einer Operation abwarten, vor Ausführung der Nächsten

Beitrag lesen

Hallo Henryk,

Also das geht so einfach nicht....

JaJa, das ist mir in den letzten Stunden mit ganzer Heftigkeit klar geworden.

Traditionellerweise musst du nun dein Skript zweimal aufrufen, bzw. 2 Skripte nehmen. Ein Skript liefert den HTML-Code und den Klimbim ringsherum und das andere Skript sendet das Bild. Du musst dir dann noch ein Schema ausdenken, wie du dem Bild liefernden Skript sagst, was es liefern soll. Das ist sehr situationsspezifisch und dabei kann ich dir erstmal so nicht helfen.

Ja, hier hab' ich noch nicht's weiter probiert.
Wenn sich die Möglichkeiten mit 2 Skripten nur auf die unten Beschriebene Methode mit den Inline-Bildern bezieht, kommt sie nicht in Frage, was bedeuten würde, ich hab im Moment keinerlei Perspektive mehr. :(((
Wenn Du noch andere Möglichkeiten weißt, gib' mir bitte noch nen Schups.

Wenn du aber gerne rumexperimentierst und wenn es dich nicht stört dass das in dem einen oder anderen Browser nicht geht, möchtest du dir evt. http://aktuell.de.selfhtml.org/artikel/grafik/inline-images/index.htm ansehen. Das Base64-Encodieren kannst du dabei in PHP von base64_encode() (http://www.php.net/manual/en/function.base64-encode.php) erledigen lassen.

Es war ein hoffnungversprechender Ansatz, nur leider stört es mich ganz massiv, das der InternetExplorer zu den Browsern gehört, die die inlineBilder nicht Anzeigen können. Das ist nicht vertretbar.
Schade-Schade, das wär's gewesen.  :((
__________________________

Um aber noch mal auf deine vorherige Mail zurückzukommen, bezüglich des sendens von headern():
Ich hab' zwischenzeitlich ne ganze Menge rumrecherchiert, was meinem aktuellen Problem zwar nicht zugutegekommen ist, aber trotzdem viel Neues und Nützliches ergeben hat.

Grundsätzlich hast Du recht, das man header() nur senden kann/darf bevor man anderen HTML-Output erzeugt.
ABER:
(vielleicht weißt Du das ja schon, und wolltest mich nicht unnötig verwirren)
Man kann innerhalb von PHP-Scripten (das dient dann hauptsächlich der Übersicht des Codes) schon mit echo"" oder print() oder mit HTML-Blöcken einen OutPut erzeugen, und später noch header() oder setcookie() senden.
Man kann sich dazu den sogenannten Funktionen zur Ausgabesteuerung bedienen (english:http://www.php.net/manual/en/ref.outcontrol.php) (deutsch:http://www.php.net/manual/de/ref.outcontrol.php).
Man startet am Anfang der Seite nur einen OutputBuffer mit
<?PHP
ob_start();
ob_implicit_flush(0);

// dann kommt der ganze ScriptKram wie bisher,
// und wenn es nötig ist, auch mal (vielleicht Aufgrund von vorher
// durchgeführten Abfragen, Berechnungen, wasweißich) einen Header
// wie z.B. setcookie(x,y,z)
// und dann wieder irgendwas mit echo"" print() usw.

Diese OutPut-Kontrolle arbeitet so, das ALLES was mit echo, print() oder an HTML gesendet wird, in dem Puffer landet, und NICHT an den Browser gesendet wird. WOHL ABER werden alle Header() und
setcookies() SOFORT an den Browser gesendet.

Es gibt dann mehrere Möglichkeiten, mit der gepufferten Ausgabe etwas "anzustellen":
Die einfachste Variante ist: "ob_end_flush();"
(beendet das Puffern und sendet alles an den Browser)
mit "ob_clean_flush();" wird das Puffern beendet und der Speicher gelöscht, ohne Ausgabe an den Browser.
Vorher kann man mit z.B. $MeineGanzeAusgabe = ob_get_contents() die GESAMTE SEITE in einen String speichern, (dann den Puffer löschen)
und $MeineGanzeAusgabe z.B. gzip-komprimieren und an gzip-fähige-Browser senden. (Bei Seiten mit viel Textinhalt sicher sehr nützlich)
Nicht gzip-fähige-Browser bekommen eben den unkomprimierten String gesand.

Das passende Script dazu, nebst ausführlicher Erklärung (und einiges mehr) gibt es hier: http://www.phpbuilder.com/columns/argerich20010125.php3?page=1
Das Script ist auf der 2. Seite beschrieben!

Hier schon mal das Script ohne weiteren Kommentar:
<?PHP
ob_start();
ob_implicit_flush(0);
?>

Hier zwischen steht dann unverändert der schon existierende Code!

<?PHP
$contents = ob_get_contents();
ob_end_clean();

if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
header ("Content-Encoding: gzip");
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
$Size = strlen($contents);
$Crc = crc32($contents);

$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, strlen($contents) - 4);

echo $contents;
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);

} else {
echo $contents;
}

function gzip_PrintFourChars($Val) {
    for ($i = 0; $i < 4; $i ++) {
        echo chr($Val % 256);
        $Val = floor($Val / 256);
    }
}
?>

Ich find's klasse.   :))

Gruß, Horst.