[PHP] Flushen van output werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik ben bezig met een systeem waar mensen een XML kunnen uploaden waarna deze bewerkt wordt op de server tot een flinke statische pagina, dit omdat de pagina heel vaak geaccessed zal worden en het parsen van de XML vaak erg lang kan duren.

Ik heb dus een pagina waar die XML verwerkt wordt en dat duurt ongeveer een minuut. Nu kan ik de max_execution_time aanpassen zodat dat geen probleem is, maar ik wil ook grafisch aangeven hoe ver ie is.

Lokaal heb ik een test gedaan met ob_flush() en flush() en dat werkt perfect (Apache 2.0, PHP 5.2.2), maar als ik het bij XS4All wil testen op de server lukt het niet (FreeBSD met FastCGI en PHP 4.4.4). Mijn code is als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    ini_set("max_execution_time",60);
    ini_set("output_buffering","On");
    
    ob_start(); 
    
    for($i = 1; $i<5; $i++) {
        echo $i."&nbsp;";
        sleep(1);
        ob_flush();
        flush();
    }
    
    ob_end_clean();


Zoals te zien is zou het scriptje elke seconde $i moeten printen, en lokaal gaat dat fantastisch, maar bij XS4All parsed ie em en na 5 seconden verschijnt het geheel. Iemand tips?

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
Gebruik je wel dezelfde browser voor het testen lokaal en bij xs4all?

Probeer anders een ob_get_contents bij elke iteratie op te slaan en dan achteraf te kijken of die inderdaad lokaal hetzelfde is als op xs4all. :)

Op php.net staat dat het soms pas werkt als je die twee flushes 3 keer achter elkaar doet, maar dat lijkt me een rare oplossing.

Waarom heb je eigenlijk output buffering op 'On' gezet?

[ Voor 30% gewijzigd door Gonadan op 03-07-2007 13:46 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik heb output buffering op On gezet als test om te kijken of het nu wel werkte, maar helaas. Ik zal die andere tips eens gebruiken.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
weet niet of dat nog steeds zo is, maar was het niet zo dat je bij de eerste flush minimaal 254 tekens moest flushen voordat hij tot een daadwerkelijke flush overgaat? (dus eerst even 254 spaties (in 1 keer uiteraard) flushen)

Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
Edwardvb schreef op dinsdag 03 juli 2007 @ 14:16:
weet niet of dat nog steeds zo is, maar was het niet zo dat je bij de eerste flush minimaal 254 tekens moest flushen voordat hij tot een daadwerkelijke flush overgaat? (dus eerst even 254 spaties (in 1 keer uiteraard) flushen)
Dat geldt alleen voor sommige IE's, daarom vroeg ik of hij voor beide testen dezelfde browser gebruikt.
Dan kan het namelijk niet aan de eerste zoveel karakters liggen. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Alex Picard
  • Registratie: November 2005
  • Laatst online: 04-09 11:25
Staat misschien de gzip compressie default aan?

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
    for($i = 1; $i<5; $i++) {
Wat zou er na 5 seconde dan WEL moeten gebeuren?
want als $i 5 is geworden, dan gaat hij volgens mij verder.
(en ik weet niet of dat de bedoeling is)

Acties:
  • 0 Henk 'm!

  • Alex Picard
  • Registratie: November 2005
  • Laatst online: 04-09 11:25
Verwijderd schreef op dinsdag 03 juli 2007 @ 15:48:
[...]

Wat zou er na 5 seconde dan WEL moeten gebeuren?
want als $i 5 is geworden, dan gaat hij volgens mij verder.
(en ik weet niet of dat de bedoeling is)
Het is de bedoeling dat telkens tijdens de lus uitvoer gegeven wordt, en door het gebruik van sleep(1) eens per seconde. De lus is inderdaad na 5 4 iteraties klaar, en het script eindigt dan.

edit:
Scherp opgemerkt van Zwippy. Tip aan TS: Als je 5 seconden wilt zoals je schrijft, en je gebruikt kleiner dan (<) in je guard, begin $i dan op 0 :9

[ Voor 15% gewijzigd door Alex Picard op 04-07-2007 02:14 ]


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

PHP:
1
for($i = 1; $i<5; $i++)

Alex Picard schreef op dinsdag 03 juli 2007 @ 16:02:
[...]De lus is inderdaad na 5 iteraties klaar, en het script eindigt dan.
4 iteraties ;)

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
armageddon_2k1 schreef op dinsdag 03 juli 2007 @ 13:51:
Ik heb output buffering op On gezet als test om te kijken of het nu wel werkte, maar helaas. Ik zal die andere tips eens gebruiken.
Zet'm eens op Off :) Ik weet niet zeker of ob_flush ook de buffer flushed als'ie in je ini aan staat, en anders ben je nu je buffer aan het bufferen en alsnog aan het einde 1x aan het uitvoeren :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
FragFrog schreef op woensdag 04 juli 2007 @ 11:59:
Zet'm eens op Off :) Ik weet niet zeker of ob_flush ook de buffer flushed als'ie in je ini aan staat, en anders ben je nu je buffer aan het bufferen en alsnog aan het einde 1x aan het uitvoeren :)
Hij heeft hem juist aangezet omdat het eerst ook niet werkte.
Het zou natuurlijk wel kunnen dat hij default al aan staat.
Misschien dat de TS binnenkort weer eens langskomt in zijn topic? ;)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik ben weer terug in mijn eigen topic :)
Heb al jullie tips bekeken, maar het helpt niks helaas.

Ik heb wel ob_get_contents() gedaan en daar kwam het volgende uit bij beiden:
code:
1
string(7) "1 " string(14) "1 2 " string(21) "1 2 3 " string(28) "1 2 3 4 "


Ik heb dat aangepast en nu is de output het volgende:
code:
1
1 2 3 4 string(7) "1 " string(7) "2 " string(7) "3 " string(7) "4 "

Maar het werkt nog steeds niet bij XS4all. Wat ik wel heb gevonden is dat de output_buffer bij XS4All op 4096 staat...wellicht heeft dat invloed?

[ Voor 34% gewijzigd door armageddon_2k1 op 04-07-2007 15:45 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
test het door eerst 5000 spaties te flushen... :)
alhoewel dat misschien wel niet betekent wat ik zo in eerste instantie denk dat het betekent...

[ Voor 49% gewijzigd door P.O. Box op 04-07-2007 16:33 ]


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
ik kan die buffer helaas alleen aanpassen via een .htaccess bestand, maar als ik ook maar probeer een PHP variable te veranderen krijg ik een 500 error.

In de .htaccess staat het volgende:
php_flag register_globals off

Heb al hoofdletters/cijfers etc gebruikt, maar het maakt niks uit.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
armageddon_2k1 schreef op woensdag 04 juli 2007 @ 15:42:
Ik ben weer terug in mijn eigen topic :)
Heb al jullie tips bekeken, maar het helpt niks helaas.

Ik heb wel ob_get_contents() gedaan en daar kwam het volgende uit bij beiden:
code:
1
string(7) "1 " string(14) "1 2 " string(21) "1 2 3 " string(28) "1 2 3 4 "


Ik heb dat aangepast en nu is de output het volgende:
code:
1
1 2 3 4 string(7) "1 " string(7) "2 " string(7) "3 " string(7) "4 "

Maar het werkt nog steeds niet bij XS4all. Wat ik wel heb gevonden is dat de output_buffer bij XS4All op 4096 staat...wellicht heeft dat invloed?
Wat heb je onderhand allemaal geprobeerd?
Je zegt al onze tips bekeken te hebben, maar ik zie nergens specifieke antwoorden op onze tips en vragen. :)

- staat gzip compressie uit?
- het je de output buffering op 0 kunnen zetten? En ook getest of je hem op 0 kreeg?
- heb je al geprobeerd om eerst die 5000 karakters weg te pompen en dan te kijken wat er gebeurd?
- welke browser gebruik je? is dat voor beide tests dezelfde?

Zou je die vragen willen beantwoorden? Dan kunnen wij met een gerust hart verder denken. ;)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
stomme vraag misschien, maar weet je zeker dat je browser niet gewoon buffert? IE doet dit namelijk sowieso..

test het even in FF, daarvan weet ik zeker dat ie echt flusht als jij dat opgeeft

[ Voor 28% gewijzigd door BasieP op 04-07-2007 17:13 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Gonadan schreef op woensdag 04 juli 2007 @ 17:08:
[...]
- staat gzip compressie uit? Staat uit
- het je de output buffering op 0 kunnen zetten? En ook getest of je hem op 0 kreeg? Niet op 0 kunnen krijgen. Leg ik daarboven uit
- heb je al geprobeerd om eerst die 5000 karakters weg te pompen en dan te kijken wat er gebeurd?Nog niet, ga ik nu doen
- welke browser gebruik je? is dat voor beide tests dezelfde?IE en FF voor zowel de lokale als de XS4All test

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Het uitpoepen van 5000 spaties werkt!
Dus, dan moet ik op een of andere manier ervoor zorgen dat ik output_buffering uit kan zetten.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
armageddon_2k1 schreef op woensdag 04 juli 2007 @ 17:53:
Het uitpoepen van 5000 spaties werkt!
Dus, dan moet ik op een of andere manier ervoor zorgen dat ik output_buffering uit kan zetten.
Ik weet niet wat de register globals uit de htaccess ermee te maken heeft maar je mag php_flags alleen gebruiken bij booleans.

code:
1
php_value output_buffering 0


Controleer wel of je de 'AllowOverride Options' of 'AllowOverride All' privileges hebt anders gaat het helaas niet werken. :)

PHP: How to change configuration settings

[ Voor 8% gewijzigd door Gonadan op 04-07-2007 19:47 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Gonadan schreef op woensdag 04 juli 2007 @ 12:04:
Hij heeft hem juist aangezet omdat het eerst ook niet werkte.
Het zou natuurlijk wel kunnen dat hij default al aan staat.
En inderdaad... ;)

* FragFrog ziet dit soort meuk wel vaker voorbijkomen :)

Vooral bij gratis hosters. Ik betwijfel dan ook of je genoeg rechten hebt. Wat je wel zou kunnen proberen is aan het begin van je script flush() aan te roepen, dit zal proberen alle buffers te flushen, dus ook de algemene buffer van de server. Beter lezen, dat had je dus al in je script staan :/

[ Voor 4% gewijzigd door FragFrog op 04-07-2007 20:49 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Nja, we betalen best wel veel voor de XS4All hosting in ieder geval.
Ik zal morgen nog eens kijken.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Okee, ik krijg dus altijd een 500 error als ik een .htaccess maak met alleen het volgende erin
code:
1
php_value output_buffering 0


Volgens mij heb ik gewoon niet de rechten om het aan te passen :(

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
armageddon_2k1 schreef op woensdag 04 juli 2007 @ 17:53:
Het uitpoepen van 5000 spaties werkt!
Dus, dan moet ik op een of andere manier ervoor zorgen dat ik output_buffering uit kan zetten.
en wat bewijst dat? helemaal niks.
het geeft gewoon aan dat de interne buffers vol zitten en dat ie dan automagisch flushed.
echter weet je nog steeds niet 100% zeker of het dan door je settings komt..

heb je al gekeken of het aan de browser lag?

(en ja ik vind het irritant als ik iemand probeer te helpen en mijn post wordt genegeerd :@)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
armageddon_2k1 schreef op donderdag 05 juli 2007 @ 18:46:
Okee, ik krijg dus altijd een 500 error als ik een .htaccess maak met alleen het volgende erin
code:
1
php_value output_buffering 0
In IE? Zet dan de 'user friendly error pages' uit.
In FF? Balen. :P
Volgens mij heb ik gewoon niet de rechten om het aan te passen :(
Misschien wordt het eens tijd om gewoon de helpdesk te bellen en/of mailen en kijken of zij iets zinnigs te melden hebben.
Misschien kunnen ze je rechten geven, of een eigen php.ini.

Alles is mogelijk, als ze maar willen. ;)

@BasieP: rete-irritant, en je wilt niet weten hoe vaak dat voorkomt. :X

[ Voor 6% gewijzigd door Gonadan op 05-07-2007 20:16 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
BasieP schreef op donderdag 05 juli 2007 @ 18:53:
[...]
heb je al gekeken of het aan de browser lag?

(en ja ik vind het irritant als ik iemand probeer te helpen en mijn post wordt genegeerd :@)
Dan moet je mijn post ook niet negeren. Het is in zowel FF als IE.

Engineering is like Tetris. Succes disappears and errors accumulate.

Pagina: 1