Zapnuty parameter implicit_flush nefunguje

Vyřešeno2.46K zhlédnutíWebhostingimplicit_flush parametry PHP
1

Zdravim, na hostingu som zapol parameter „implicit_flush“

Jednoduchy kod vsak nefunguje. Co je potrebne este zapnut/vypnut aby mi kod vypisoval stale hodnotu? Na localhoste mi rovnaky kod funguje. Vopred vdaka za radu.

<?php
header("X-Accel-Buffering: no");
ob_implicit_flush(true);
ob_end_flush();
$max = 50;
for ($i=0; $i<$max; $i++) {
    echo $i.'<br>';
    $response = array(  'server time: ' . date("h:i:s", time()), 'progress' => round($i/$max*100));
    echo json_encode($response);
    sleep(1);
}

?>
Role: Zákazník
Otázka je uzamčena pro nové odpovědi.
TF57053 Vybral nejlepší odpověď 25. 8. 2021
1
53.63K Odpověď od WEDOS Internet, a.s. 1 Komentář

Dobrý den,

omlouvám se, kód má být takto

ob_start();
for($i=0; $i<10; $i++){
echo $i ."<br />";
echo str_repeat(' ',1024*64);
ob_flush();
sleep(1);
flush();
}

Role: Podpora Web: https://stackoverflow.com/ Vizitka: Roses are Red, Violets are Blue Unexpected '{' on line 32.
TF57053 publikoval nový komentář 25. 8. 2021
1

Pridal som kod na svoju domenu: https://zverejnovanie.markusovce.eu/testx.php

Ale rozdiel nevidim ziaden. Ak zvysim parameter napr. na 1 az 100 tak stranka sa nacitava 100 sekund a potom zobrazi vsetky cisla od 1 po 100. Nevidim zeby kazdu sekundu pridala novy riadok s cislom.

Pisete, ze vam to funguje. Kde ste to skusali vy? Na localhoste to ide aj mne. Ale u vas na hostingu uz nie. Neviem preco.

Role: Zákazník
PK265670 publikoval nový komentář 17. 2. 2023
0
53.63K Odpověď od WEDOS Internet, a.s. 0 Comments

Dobrý de,

v případě použití příkazu implicit_flush je potřeba ideálně nastavit hlavičky, tedy

header('X-Accel-Buffering: no');
// Set a valid header so browsers pick it up correctly.
header('Content-type: text/html; charset=utf-8');
 // Emulate the header BigPipe sends so we can test through Varnish.
header('Surrogate-Control: BigPipe/1.0');
 // Explicitly disable caching so Varnish and other upstreams won't cache.
header("Cache-Control: no-cache, must-revalidate");
 header("Content-Encoding: none");

Dále, pokud použijete ob_flush(), je potřeba nejdříve použít ob_start()

ob_start();
for($i=0; $i<10; $i++){
echo $i ."<br />";
ob_flush();
sleep(1);
flush();

Tento kód mi v pořádku funguje.

Role: Podpora Web: https://stackoverflow.com/ Vizitka: Roses are Red, Violets are Blue Unexpected '{' on line 32.
JŠ255861 Odpověděl na otázku 25. 8. 2021
0
53.63K Odpověď od WEDOS Internet, a.s. 0 Comments

Vlákno nyní uzavírám z důvodu neaktivity. V případě potřeby založte nový dotaz nebo nás kontaktujte pomocí kontaktního formuláře.

Role: Podpora Web: https://stackoverflow.com/ Vizitka: Roses are Red, Violets are Blue Unexpected '{' on line 32.
JŠ255861 odznačil odpověď jako nejlepší 25. 8. 2021
0
53.63K Odpověď od WEDOS Internet, a.s. 1 Komentář

Dobrý den,

vypadá to že na vině bude gzip comprese. Zkuste do souboru .htaccess vložit následující kód a poté promažte cache, zda se změna projeví.

RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]

Role: Podpora Web: https://stackoverflow.com/ Vizitka: Roses are Red, Violets are Blue Unexpected '{' on line 32.
TF57053 publikoval nový komentář 11. 6. 2021
0
53.63K Odpověď od WEDOS Internet, a.s. 1 Komentář

Dobrý den,

samotná fce je aktivní. Konkrétně ve Vašem kódu je problém se sleep(1), které patrně naráží na problém s time limitem.

Funguje mi u Vás tento kód

<?php
// Set a valid header so browsers pick it up correctly.
header('Content-type: text/html; charset=utf-8');
 // Emulate the header BigPipe sends so we can test through Varnish.
header('Surrogate-Control: BigPipe/1.0');
 // Explicitly disable caching so Varnish and other upstreams won't cache.
header("Cache-Control: no-cache, must-revalidate");
 // Setting this header instructs Nginx to disable fastcgi_buffering and disable
// gzip for this request.
header('X-Accel-Buffering: no');
 ob_implicit_flush(true);
ob_end_flush();
$max = 50;
for ($i=0; $i<$max; $i++) {
    echo $i.'<br>';
    $response = array(  'server time: ' . date("h:i:s", time()), 'progress' => round($i/$max*100));
    echo json_encode($response);
    }
?>

Nicméně se kód vypíše instantně a ne postupně. Tento problém jsem však zpozoroval i na jiném hostingu i na vlastním serveru. Zatím stále ověřuji čím přesně by to mohlo být způsobeno.

Role: Podpora Web: https://stackoverflow.com/ Vizitka: Roses are Red, Violets are Blue Unexpected '{' on line 32.
TF57053 publikoval nový komentář 8. 6. 2021
0
43.76K Odpověď od WEDOS Internet, a.s. 1 Komentář

Dobrý den,

zkuste změnit verzi PHP v administraci zde.

Role: Podpora
TF57053 publikoval nový komentář 31. 5. 2021