[PHP/Apache/Win] flush-functie werkt niet (meer)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jeeeroen
  • Registratie: Juni 2004
  • Niet online
Hallo,

Ik heb onlangs PHP en Apache opnieuw geïnstalleerd op mijn Windows (XP) machine. Sindsdien werkt de flush-functie in PHP niet meer. Ik heb hier eerder last van gehad en heb het toen kunnen oplossen door wat instellingen in php.ini en httpd.conf aan te passen. Ik gebruikte toen PHP 5 en Apache 2, en nu nog steeds. Mijn oude configuratiebestanden zijn echter verloren gegaan, waardoor ik niet meer kan terugvinden hoe ik het toen heb opgelost.

Naar de volgende instellingen in php.ini heb ik al gekeken, en die staan volgens mij goed:

output_buffering = 0
zlib.output_compression = Off
implicit_flush = Off

Ik meende dat er in httpd.conf nog iets gewijzigd moest worden wat betreft compressie. Zoals bij de documentatie van de flush-functie in PHP al staat:
Server modules for Apache like mod_gzip may do buffering of their own that will cause flush() to not result in data being sent immediately to the client.
Ik kan de gzip-module echter niet terugvinden in Apache 2, dus ik weet niet zeker of dat het probleem was, of dat de compressie op een andere manier moet worden uitgeschakeld.

Een simpel PHP-scriptje om te testen:
code:
1
2
3
4
5
6
7
8
<?php

echo 'De tijd: ';
flush();
sleep(1);
echo date('H:i:s');
  
?>

(De tekst 'De tijd' zou een seconde eerder moeten verschijnen voordat de tijd wordt weergegeven.)

Wie heeft een oplossing voor mijn probleem?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Probeer eens te upgraden/downgraden naar een andere apache of php versie. Bij mij werkt het script prima.

PHP versie: 5.1.1
Apache: 2.0.54

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 10:13

Onbekend

...

Een simpel PHP-scriptje om te testen:
code:
1
2
3
4
5
6
7
8
<?php

echo 'De tijd: ';
flush();
sleep(1);
echo date('H:i:s');
  
?>

(De tekst 'De tijd' zou een seconde eerder moeten verschijnen voordat de tijd wordt weergegeven.)


Is die tijdsduur niet in milliseconden gegeven? Volgens mij moet er Sleep(1000) staan.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Ook onbekend schreef op zaterdag 08 juli 2006 @ 14:04:
Is die tijdsduur niet in milliseconden gegeven? Volgens mij moet er Sleep(1000) staan.
Nee zie, http://nl2.php.net/manual/en/function.sleep.php .
PHP kent verder nog de functie usleep, daaraan geef je de tijd in microseconden mee (dus ook niet in miliseconden).

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Welke browser gebruik je om de pagina te openen?

Je vertelt je webserver wel te flushen (de output uit de buffer naar de browser verzenden), maar dat heeft geen enkele invloed op het buffer-gedrag van de browser. Zo zou IE pas items op het scherm tonen nadat minstens 4096 bytes zijn ontvangen. Van Firefox weet ik niet hoe dir precies zit.

Probeer dit maar eens;
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
echo "<!--";
for($i = 0; $i < 4096; $i++)
  echo "x";
echo "//-->\n\n";
echo 'De tijd: ';
flush();
sleep(1);
echo date('H:i:s');
  
?>


Heb je ook de user-comments op http://www.php.net/flush al gelezen?

[ Voor 50% gewijzigd door frickY op 08-07-2006 15:10 ]


Acties:
  • 0 Henk 'm!

  • Jeeeroen
  • Registratie: Juni 2004
  • Niet online
frickY schreef op zaterdag 08 juli 2006 @ 15:07:
Welke browser gebruik je om de pagina te openen?
Mozilla Firefox, en daarin werkt het wel goed als ik het script draai op de server van mijn hostingprovider. Dat geldt trouwens ook voor Internet Explorer. Bovendien heeft dit eerst op mijn localhost ook gewerkt, maar nu niet meer, omdat ik vergeten ben welke instellingen ik moest aanpassen.
Jazeker, maar ik heb niets kunnen vinden.

Acties:
  • 0 Henk 'm!

  • Jeeeroen
  • Registratie: Juni 2004
  • Niet online
Borizz schreef op zaterdag 08 juli 2006 @ 13:50:
Probeer eens te upgraden/downgraden naar een andere apache of php versie. Bij mij werkt het script prima.

PHP versie: 5.1.1
Apache: 2.0.54
Dat heb ik nu geprobeerd, maar het maakt niets uit. Ik gebruik nu (weer) PHP 5.1.4 en Apache 2.0.58. Jouw versies verschillen hier niet veel van, dus dat zou niet uit moeten maken. Je draait het gewoon onder Windows? En tussen dat je de tekst en de tijd ziet zit dus een seconde verschil?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Dus gzip staat uit? (zie 1 van de bovenste user-comments op php.net)
Dat is namelijk de enige optie die ik weet welke het flushen van output kan voorkomen, en kan verschillen per installatie.

Acties:
  • 0 Henk 'm!

  • Jeeeroen
  • Registratie: Juni 2004
  • Niet online
frickY schreef op zaterdag 08 juli 2006 @ 15:35:
Dus gzip staat uit? (zie 1 van de bovenste user-comments op php.net)
Dat is namelijk de enige optie die ik weet welke het flushen van output kan voorkomen, en kan verschillen per installatie.
Ik neem aan van wel, want ik heb het in php.ini uitgeschakeld en in Apache kan ik er niets over vinden, er staat ook geen gzip-module in de map modules.

Acties:
  • 0 Henk 'm!

  • Jeeeroen
  • Registratie: Juni 2004
  • Niet online
frickY schreef op zaterdag 08 juli 2006 @ 15:07:
Probeer dit maar eens;
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
echo "<!--";
for($i = 0; $i < 4096; $i++)
  echo "x";
echo "//-->\n\n";
echo 'De tijd: ';
flush();
sleep(1);
echo date('H:i:s');
  
?>
Ik heb je scriptje nog even uitgeprobeerd, en dat werkt wonderlijk genoeg wel. Eerst werkte het scriptje dat ik plaatste echter ook. Ik heb nog even wat tests gedaan en kwam erachter dat mijn scriptje nu ook niet meer werkt als ik het op de server van mijn hostingprovider draai. Op een andere pc werkt precies hetzelfde script op dezelfde server nog wel (met Firefox). Er is dus toch iets mis met mijn browsers of mijn pc. Zou de installatie van PHP en/of Apache iets vernield kunnen hebben?
Pagina: 1