[php] output tonen voor einde schript

Pagina: 1
Acties:

  • Nephilim
  • Registratie: Augustus 2000
  • Laatst online: 15-05 00:38
Op welke manieren kan je de output van een script al naar de browser sturen?

Ik heb het met flush() geprobeerd, maar ook dan wacht hij nog te lang voor hij iets stuurt. Ook ob_start() & ob_flush() geven niet het goeie resultaat.

Verwijderd

Op zondag 07 juli 2002 10:22 schreef Nephilim het volgende:
Op welke manieren kan je de output van een script al naar de browser sturen?

Ik heb het met flush() geprobeerd, maar ook dan wacht hij nog te lang voor hij iets stuurt. Ook ob_start() & ob_flush() geven niet het goeie resultaat.
Welk resultaat wil je dan?

  • Nephilim
  • Registratie: Augustus 2000
  • Laatst online: 15-05 00:38
Op zondag 07 juli 2002 10:25 schreef DiEana het volgende:
Welk resultaat wil je dan?
Ik heb een plak tekst die ik wil laten zien voor ik aan de verwerking begin, tijdens de verwerking wil ik dan ook steeds een deel naar de browser sturen.

Het eerste wat nu op het scherm verschijnt, is die tekst en al meteen een deel van de verwerking, daarna toont hij -zoals ik het wil- elke keer een regel meer van wat hij al verwerkt heeft.

Verwijderd

Op zondag 07 juli 2002 10:49 schreef Nephilim het volgende:

[..]

Ik heb een plak tekst die ik wil laten zien voor ik aan de verwerking begin, tijdens de verwerking wil ik dan ook steeds een deel naar de browser sturen.

Het eerste wat nu op het scherm verschijnt, is die tekst en al meteen een deel van de verwerking, daarna toont hij -zoals ik het wil- elke keer een regel meer van wat hij al verwerkt heeft.
Laat eens wat code dan zien, want 'ob_start() en ob_flush()' zijn wel de methoden om dit te verkijgen.

Verwijderd

Dit moet gewoon met http://php.net/flush en als het al werkt (want dat is niet gegarandeerd) werkt het alleen bij mod_php en niet bij de CGI versie.

de ob_* functies zijn er juist voor bedoeld om de output te bufferen (output buffering) en dus niet direct naar de browser te sturen.

  • Nephilim
  • Registratie: Augustus 2000
  • Laatst online: 15-05 00:38
Op zondag 07 juli 2002 10:53 schreef DiEana het volgende:
Laat eens wat code dan zien, want 'ob_start() en ob_flush()' zijn wel de methoden om dit te verkijgen.
PHP:
1
<?     session_start();     if ($data['authenticated'] == 1) {        // user has logged in already        ob_start();        echo 'You are logged in<br>';        // try to detect a proxy server        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {            echo 'You are surfing through a proxy server<br>';            echo 'Your IP: <b>' . $_SERVER['HTTP_X_FORWARDED_FOR'] . '</b><br>';            echo 'Your proxy: <b>' . $_SERVER['REMOTE_ADDR'] . '</b><br>';            $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];        } else {            echo 'You are NOT surfing through a proxy server, or the proxy could not be detected<br>';            echo 'Your IP: <b>' . $_SERVER['REMOTE_ADDR'] . '</b><br>';            $IP = $_SERVER['REMOTE_ADDR'];        }        //print_r($_SERVER);        ?>        <form action="portscan.php" method="post">        Ports:<br>        begin: <input type="text" name="port_begin"><br />        end: <input type="text" name="port_end"><br />        timout <input type="text" value="10" name="timeout"><br />        <input type="submit" name="scan" value="Scan!">        </form>        <?        //if (!isset($port)) $port = 2000;        if ($scan) {            if ($port_begin > $port_end) {                $port_temp = $port_begin;                $port_begin = $port_end;                $port_end = $port_temp;            }            if ($port_end - $port_begin > 100) {                echo 'You can scan no more than 100 ports due to bandwith control';            } else {                if ($timeout == '') {                    $timeout = 10;                }                $start_time = time();                echo 'Scanning from port <b>' . $port_begin . '</b> to <b>' . $port_end . '</b><br>';                ob_flush();                for ($i = $port_begin; $i <= $port_end; $i++) {                    $socket = fsockopen($IP, $i, $errno, $errstr, $timeout);                    if (!$socket) {                        // couldn't connect: port probably closed                        echo '<b>' . $i . '</b>: ' . $errstr . '<br>';                    } else {                        echo '<b>' . $i . '</b>: Open port found!<br>';                        //echo 'Open port found: <b>' . $i . '</b><br>';                    }                    ob_flush();                }                $end_time = time();                $totalsec = $end_time - $start_time;                echo 'Scanning took ' . $totalsec . ' seconds<br>';            }        }     } else {         // user is NOT logged in        echo "You should log in first";     }?>

Commentaar op m'n coding style is ook altijd welkom :)

Verwijderd

Op zondag 07 juli 2002 10:57 schreef Zef het volgende:
Dit moet gewoon met http://php.net/flush en als het al werkt (want dat is niet gegarandeerd) werkt het alleen bij mod_php en niet bij de CGI versie.

de ob_* functies zijn er juist voor bedoeld om de output te bufferen (output buffering) en dus niet direct naar de browser te sturen.
inderdaad, dacht er net aan toen ik terug kwam =) bij deze dus...

Verwijderd

Wederom: Daar is ob_flush niet voor bedoeld. Lees liever de informatie en notes op http://www.php.net/manual/en/function.flush.php

  • Nephilim
  • Registratie: Augustus 2000
  • Laatst online: 15-05 00:38
Op zondag 07 juli 2002 11:07 schreef Zef het volgende:
Wederom: Daar is ob_flush niet voor bedoeld. Lees liever de informatie en notes op http://www.php.net/manual/en/function.flush.php
Dat doe ik ook :-)
M'n oorspronkelijke code was flush() ipv ob_flush() (zonder de ob_start() vanboven natuurlijk), en toen deed hij het zoals hierboven staat. Nu ja, het is niet helemaal zoals ik het wil, maar so be it.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Evt kan je ook ob_implicit_flush() gebruiken, dan wordt er na elke echo/print etc geflushed.
Pagina: 1