Problemen met flush

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

De Clercq Andy

De Clercq Andy

12/11/2013 16:49:04
Quote Anchor link
Hallo,
in onderstaand script spreek ik een webservice aan en wacht op zijn antwoord.
Tijdens het wachten zou ik met flush mijn gebruikers willen duiden op het feit dat er niks mis is maar dat hij bezig is met het ophalen van gegevens.
Maar hij flusht niks en plaats de output op het einde net als de andere echo opdracht.
Wat doe ik fout?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
session_start();
if ($_SESSION['ingelogd']!="ja")
    {

    header ("location:inloggen.php");
    exit();
    }

$type=$_GET['type'];
if (! is_numeric($type))
{

/*er is geknoeid met de variabele*/
exit();
}

else
{
/*functie om de bewonerid uit de record te strippen*/
function stripid($smap)
    {

    $amap=explode("/",$smap);
    $bewonerid=$amap[1];
    return $bewonerid;
    }

?>

<html>
<head>
<!-- javascript om popup te openen en andere dicht te doen -->
<script type="text/javascript" language="javascript">
function opendichtcenter()
{
 var w= 750;
var h= 125;
  var left = (screen.width/2)-(w/2);
  var top = (screen.height/2)-(h/2);
  window.open('downloaden.php', 'downloaden', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
window.close('wachten');
}
</script>
</head>
<body>
<?php
header( 'Content-type: text/html; charset=utf-8' );
include('ftp.php');
$abestanden=array();
array_push($abestanden,'nul','Dagboek.pdf','Therapeutisch_schema.pdf');
$basisurl='http://81.82.201.205/Bewoners.svc/J1S2D3K4A5/';
$smap=$_SESSION['map'];
$bewonerid=stripid($smap);
$url=$basisurl.$bewonerid.'/'.$type;
echo str_repeat(" ", 256)."<pre>";
echo "Bezig met aanmaken van uw recente versie<br>";
flush();
ob_flush();
sleep(1);
$jsonObject= json_decode(file_get_contents($url));
if ($jsonObject=="OK")
    {

    $path='d/'.$bewonerid;
    $bestandsnaam=$abestanden[$type];
    $openen=$ftp_address.$path.'/'.$bestandsnaam;
    $_SESSION['downloaden']= $openen;
    echo "<form>
        <p align= \"center\">Uw recente versie is aangemaakt. <br>Klik om de download te starten <br>
        <input type=\"button\" value=\"downloaden\" OnClick=\"opendichtcenter()\">
        </form></p>"
;
    }

else
    {
    echo "er liep iets fout bij het aanmaken van uw recente versie. <br>
        Gelieve even te wachten en daarna opnieuw te proberen. Indien deze fout zich blijft voordoen neemt u best contact op met DVC Heilig Hart.<br>
        Bedankt voor uw medewerking."
;

    }
}


?>

</body>
</html>
?>

Gewijzigd op 12/11/2013 16:56:54 door De Clercq Andy
 
PHP hulp

PHP hulp

23/11/2024 10:08:07
 
Willem vp

Willem vp

12/11/2013 23:12:59
Quote Anchor link
Het hoeft niet per se aan je code te liggen. Ook de webserver en browser kunnen nog buffering toepassen en de flush van PHP is daar machteloos tegen. Als je Apache gebruikt zou het nog kunnen helpen om mod_gzip uit te zetten, maar eigenlijk is flush() een functie die alleen goed bruikbaar is als je PHP als losse scriptingtaal op de commandline gebruikt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/11/2013 10:29:20
Quote Anchor link
Andy,

Het beste advies is om heel die ob_ functies en flush() te vergeten. in plaats daarvan moet je gewoon je PHP programma boven in het bestand houden en de output onder in het bestand. In het programma gedeelte mag geen enkele output komen. Je houdt daar alles in de variabelen.

Superklein voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

// hier komt het programma gedeelte. In principe zonder output zolang alles goed gaat.

$hour = intval(date('G'));
$dagdeel = 'nacht';

if($hour >= 6)
    $dagdeel = 'morgen';
if($hour >= 12)
    $dagdeel = 'middag';
if($hour >= 18)
    $dagdeel = 'avond';

// achter de sluittag van php begint de output.
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Mijn pagina<title>
</head>

<body>
<p>Goede <?php echo $dagdeel; ?>, van harte welkom bij de betere website</p>
</body>
</html>


Bij grotere projecten zie je vaak dat het ouput gedeelte in een apart bestand staat. Dit wordt dan ook wel de view genoemd.
 
De Clercq Andy

De Clercq Andy

13/11/2013 15:53:25
Quote Anchor link
Bedankt voor deze tips.
Maar hoe kan ik dit probleem aan de hand van de tweede opmerking oplossen?
Moraal van het verhaal is dat de connectie met de webservice lang kan duren, vandaar dat ik output flush dat is de enige reden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.